高CPU使用率mysql

时间:2014-04-07 13:19:14

标签: mysql cpu-usage

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

它曾经在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)

我能做些什么才能看到造成如此高使用率的原因?

1 个答案:

答案 0 :(得分:1)

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

  • Mytop
  • Innotop

Mytop有一些查看活动连接和查询的好方法。 Innotop可以很好地查看使用表空间,缓冲池等的内容。

您不必使用这些工具来收集数据。您可以使用Percona Toolkit工具,它们有一些很棒的工具可以深入研究MySQL使用的细节。

不要忘记有要检查的日志。具体来说,您应该检查慢速日志。要查找是否存储以及存储位置,可以运行以下命令:

首先确保它已开启:

MySQL> SHOW VARIABLES LIKE 'slow_query_log';

然后检查文件系统中的位置:

MySQL> SHOW VARIABLES LIKE 'slow_query_log_file';

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

收集完这些数据后,您应该能够很好地了解MySQL实例的情况。当然还有更多的工具和技术,但我发现这些工具和技术足以形成良好的性能基准。