【问题标题】:high cpu usage mysql高cpu使用mysql
【发布时间】:2014-04-07 13:19:14
【问题描述】:

我已经开始在我的 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                      

当我做一个显示进程列表时,我没有看到太多运行

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)

我还能做些什么来看看是什么导致了如此高的使用率?

【问题讨论】:

  • 这类问题最好在ServerFault上问
  • 这个问题对你有帮助吗:http://stackoverflow.com/questions/1282232/mysql-high-cpu-usage?rq=1
  • 您使用的是专用数据库服务器吗?您最近是否对您的应用程序进行过任何更改?
  • cpu 重查询往往需要更长的时间,你可以用mytop检查你的mysql进程列表很舒服

标签: mysql cpu-usage


【解决方案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 实例正在发生的事情有一个很好的了解。当然还有更多的工具和技术,但我发现这些足以形成良好的性能基准。

【讨论】:

    猜你喜欢
    • 2018-09-14
    • 1970-01-01
    • 2010-11-19
    • 2020-08-25
    • 1970-01-01
    • 2022-06-19
    • 1970-01-01
    • 2013-12-15
    相关资源
    最近更新 更多