2014-04-07 106 views
2

我已经开始在CentOS服务器上看到MySQL上的cpu使用率非常高。高cpu使用情况mysql

它曾经运行在20%-30%之间,但现在有时会达到400%。

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
9169 mysql  20 0 2232m 66m 6816 S 140.6 0.9 17:37.03 mysqld      

当我做SHOW PROCESSLIST我没有看到太多运行

mysql> show processlist; 
+-------+------+-----------+----------+---------+------+-------+------------------+ 
| Id | User | Host  | db  | Command | Time | State | Info    | 
+-------+------+-----------+----------+---------+------+-------+------------------+ 
| 53 | sqluser | localhost | mydns | Sleep | 0 |  | NULL    | 
| 449 | sqluser | localhost | DB1 | Sleep | 0 |  | NULL    | 
| 16151 | sqluser | localhost | DB2 | Sleep | 105 |  | NULL    | 
| 16473 | sqluser | localhost | DB2 | Sleep | 61 |  | NULL    |  
| 16641 | sqluser | localhost | DB2 | Sleep | 39 |  | NULL    | 
| 16729 | sqluser | localhost | DB2 | Sleep | 29 |  | NULL    | 
| 16733 | sqluser | localhost | DB2 | Sleep | 29 |  | NULL    | 
| 16815 | sqluser | localhost | DB2 | Sleep | 15 |  | NULL    | 
| 16867 | sqluser | localhost | DB2 | Sleep | 9 |  | NULL    | 
| 16886 | sqluser | localhost | NULL  | Query | 0 | NULL | show processlist | 
| 16910 | sqluser | localhost | DB2 | Sleep | 5 |  | NULL    | 
| 16919 | sqluser | localhost | DB1 | Sleep | 4 |  | NULL    | 
| 16935 | sqluser | localhost | DB1 | Sleep | 2 |  | NULL    | 
| 16937 | sqluser | localhost | DB1 | Sleep | 2 |  | NULL    | 
| 16939 | sqluser | localhost | DB1 | Sleep | 1 |  | NULL    | 
| 16941 | sqluser | localhost | DB1 | Sleep | 1 |  | NULL    | 
| 16951 | sqluser | localhost | DB1 | Sleep | 1 |  | NULL    | 
| 16952 | sqluser | localhost | DB2 | Sleep | 1 |  | NULL    | 
| 16955 | sqluser | localhost | DB1 | Sleep | 1 |  | NULL    | 
| 16960 | sqluser | localhost | DB1 | Sleep | 0 |  | NULL    | 
| 16965 | sqluser | localhost | DB1 | Sleep | 0 |  | NULL    | 
+-------+------+-----------+----------+---------+------+-------+------------------+ 
21 rows in set (0.00 sec) 

还有什么我可以做,看看是什么原因造成如此高的使用率?

+0

最好在ServerFault上问这种类型的问题 – AlexF

+0

这个问题不是帮助你吗:'http://stackoverflow.com/questions/1282232/mysql-high-cpu-usage?rq = 1' – ursitesion

+0

你是否使用专用DB服务器?你有没有在你的应用程序中做出任何最新的变化 – ursitesion

回答

0

首先,你需要得到更多的数据,为了做到这一点,我通常使用一些工具,如:

  • Mytop
  • Innotop

Mytop有一些伟大的方式查看活动连接和查询。 Innotop有很好的方法来查看正在使用您的表空间,缓冲池等。

您不必使用这些工具来收集数据。您可以使用Percona工具包工具,它们有一些非常好的工具,可以深入挖掘MySQL的使用情况。

不要忘记有日志需要检查。具体来说,你应该检查慢日志。找到,如果和被存储在何处,您可以运行以下:

首先要确保它的开启:

MySQL> SHOW VARIABLES LIKE 'slow_query_log'; 

然后检查它位于哪里你的文件系统上:

MySQL> SHOW VARIABLES LIKE 'slow_query_log_file'; 

事实证明,在缓慢的日志中使用Percona工具pt-query-digest对我很有帮助。 它给出了使用最多时间(通常意味着资源密集型查询)的查询的内聚列表。您可以在这里查看该工具的用法:PT-Query-Digest 您可能会发现一些非常慢的查询,如果是的话,我会评估它们的使用方式,看看是否需要添加索引或进行优化。

一旦你收集了这些数据,你应该对你的MySQL实例发生了什么有一个很好的了解。当然,还有更多的工具和技术,但是我发现这些足以形成良好的性能基准。