我已经开始在我的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)
我能做些什么才能看到造成如此高使用率的原因?
答案 0 :(得分:1)
首先,你需要获得更多数据,为了做到这一点,我通常使用一些工具,如:
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实例的情况。当然还有更多的工具和技术,但我发现这些工具和技术足以形成良好的性能基准。