哪个用户占用了 MySQL 数据库服务器的 CPU?

哪个用户占用了 MySQL 数据库服务器的 CPU?

我负责维护网站托管服务器,服务器经常会因为负载增加或大量 CPU 资源被占用而变慢。我发现 MySQL 的使用导致负载大幅增加,服务器变得非常缓慢,但我想找出哪个用户导致了 MySQL 使用率过高?

答案1

可以以SHOW PROCESSLIST;MySQL 管理用户的身份通过 MySQL CLI 进行相当基本的操作来完成此操作。

如果有一个进程需要终止,一个简单的操作KILL <query Id>;就可以解决。

这个开发箱里什么也没有发生,但它是您在输出中看到的一个示例:

mysql> show processlist;
+----+------+-----------+--------+---------+------+-------+------------------+
| Id | User | Host      | db     | Command | Time | State | Info             |
+----+------+-----------+--------+---------+------+-------+------------------+
|  7 | root | localhost | wikidb | Query   |    0 | NULL  | show processlist |
+----+------+-----------+--------+---------+------+-------+------------------+

如您所见,它显示有关运行查询的数据库、运行时、查询状态和查询内容的有用信息。

答案2

我确实同意@Michael Hampton 和@Adrian 的回复,但我想补充我自己的建议 - 尝试登录服务器并运行以下命令:

[~]# watch mysqladmin pr

这样应该会显示正在访问的数据库和执行的查询,添加“watch”将监视和刷新列表。如果任何数据库使服务器超载,您可以尝试运行以下命令:

service mysql stop

myisamchk -r /var/lib/mysql/dbname/*.MYI

service mysql start

如果重启后问题仍然存在,您可能需要优化查询或限制用户对 MySQL 服务器资源的访问。

答案3

另一个好的建议是启用查询日志/将慢查询时间设置得较低并查看这些日志/使用这样的工具percona 工具包来解析它们。

我们亲自利用玛拉雅数据库MySQL 的构建版本具有用户统计应用补丁程序对其进行修改information_schema以包含有用的数据,例如使用的 CPU 时间、繁忙时间等等。

例子:

+------------------+----------+-----------+--------------+--------------+
| USER             | CPU_TIME | BUSY_TIME | ROWS_FETCHED | ROWS_UPDATED |
+------------------+----------+-----------+--------------+--------------+
| xxx_agaipdf |   208850 |    219735 |    372405321 |       950924 |
| xxx_pdfseus |   179626 |    196981 |    145208779 |       771474 |
| xxx_gopdf   |   177303 |    191366 |    323861619 |       653246 |
| xxx_nextuse |   140624 |    153672 |     37374285 |       425618 |
| xxx_gospel  |   135814 |    142874 |     65301676 |       491579 |
+------------------+----------+-----------+--------------+--------------+

相关内容