我开始发现 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)
还有什么我可以做的,看看是什么导致了如此高的使用率?
最佳答案
首先,您需要获取更多数据,为此我通常会使用一些工具,例如:
- 我的顶
- 英诺达
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 实例发生了什么有一个很好的了解。当然还有更多的工具和技术,但我发现这些足以形成良好的性能基准。
关于mysql - mysql cpu占用率高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22913676/