2014-04-07 146 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實例發生了什麼有一個很好的瞭解。當然,還有更多的工具和技術,但是我發現這些足以形成良好的性能基準。