mysql - mysql cpu占用率高

标签 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)

还有什么我可以做的,看看是什么导致了如此高的使用率?

最佳答案

首先,您需要获取更多数据,为此我通常会使用一些工具,例如:

  • 我的顶
  • 英诺达

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/

相关文章:

mysql - 向数据库添加附加表

apache - 如何计算每个 HTTP 请求的 CPU 使用率

r - 为什么我的 R 在运行诸如 step() 之类的函数时使用所有 CPU 内核?

php - 在 POST 上生成并保存序列号

mysql - 如何在 mysql 中删除多个左连接中的孤立行?

mysql - 如何删除Mysql中的重复记录,只删除1条记录

php - 使用 PHP 将图像上传到 MySQL

java - 执行时间和处理时间波动

python-2.7 - scrapy爬虫CPU使用率过高

swift - 在 Swift 中重写 CIImage 最终会导致处理器下降到 0% 并卡住