首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >顶级CPU消耗MySQL进程

问顶级CPU消耗MySQL进程
EN

Database Administration用户
提问于 2018-06-10 05:51:54
回答 1查看 5.8K关注 0票数 1

我试图找出消耗高CPU的查询,但不能这样做。

这个命令top -H为我提供了高CPU消耗线程PID,但我无法将它们与我的进程列表输出相匹配。

有办法这样做吗?

EN

回答 1

Database Administration用户

发布于 2018-06-10 16:37:43

您可以通过启用慢速查询日志 (SET GLOBAL slow_query_log=1;并为long查询时间变量设置合适的值以设置您认为是"long“的值)来查看哪些查询比较慢。(例如,也许SET GLOBAL long_query_time=3; -单位是秒)。但是,由于CPU利用率高以外的其他原因,查询可能比较慢,例如,由于高I/O利用率。不过,这至少是识别糟糕查询的起点。

默认情况下,缓慢日志被写入名为‘${HOSTNAME}-sl.log’的数据dir中的文件。然后,您可以使用像mysqldumpslow这样的工具来分析这个文件,例如:mysqldumpslow -s t /var/lib/mysql/localhost-slow.log。它将提取每个慢速查询,并将它们从最慢到最慢排序。或者你可以使用查询摘要做同样的事情

然后,可以为会话(SET profiling = 1;)启用查询分析,执行在慢速查询日志中标识的每个候选查询,并执行以下操作:

代码语言:javascript
复制
SHOW PROFILES;

这为您提供了最近的查询及其查询ID的列表。使用此ID查找每个查询的CPU使用情况:

代码语言:javascript
复制
SHOW PROFILE CPU FOR QUERY <query id>;  

这将显示查询执行的各个阶段,以及每个阶段的持续时间和CPU使用情况(用户和系统)。

请注意,这并不是100%的准确性-- 显示配置文件的文档页注意到:

分析在某些体系结构上只具有部分功能。对于依赖于getrusage()系统调用的值,在不支持调用的系统(如Windows )上返回NULL。此外,分析是每个进程而不是每个线程。这意味着除了您自己的线程之外,服务器内线程上的活动可能会影响您看到的计时信息。

还请注意,该页面显示SHOW PROFILE在MySQL 5.6.7中被废弃,performance_schema是用来替换它的;参见使用性能模式的查询分析。但是,似乎没有从其中提取CPU使用信息的方法,因此您可能只需使用SHOW PROFILE CPU ...即可。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/209211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档