MySQL定位CPU利用率过高的SQL方法

MySQL定位CPU利用率过高的SQL方法

(1).获取Mysql的服务器进程号,登陆mysql所在的Linux服务器,执行命令

[root ~]# top

在COMMAND列找到mysqld,并且%CPU使用率高的,比如数值超过80的,获取PID号。

------------------------------------------------------------------------------
PID  USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
3684 mysql     20   0   62.8g  53.3g   7060 S  86.6 42.4  13332:37 mysqld
------------------------------------------------------------------------------ 

3684为mysql进程ID,接下来再用它查询出占用CPU多的线程。

(2).查询进程中的线程
使用命令

[root ~]#top -H -p 3684

找到线程

------------------------------------------------------------------------------
PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                               
4258 root      20   0 1443252 356688  11748 R 99.7  4.4   2:25.74 mysqld 
------------------------------------------------------------------------------

其中PID 4258为线程id号。

(3).根据线程ID去mysql查询出对应的SQL

select a.user,a.host,a.db,b.thread_os_id,b.thread_id,a.id processlist_id,a.command,a.time,a.state,a.info 
from information_schema.processlist a,performance_schema.threads b 
where a.id = b.processlist_id and b.thread_os_id=4258;

查询结果:

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| user | host                            | db   | thread_os_id | thread_id | processlist_id | command | time    | state             | info                                                                                                                          |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| uts   |192.168.40.172:58025	|tdxdb|4258	|2109703	 |2109670	        |Query        | 1	       |updating	|DELETE FROM`141702004`WHERE`seq_id` BETWEEN 22450234331 AND 22450234331    |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

其中,info列显示的SQL就是占用CPU较大的SQL,针对其进行优化即可。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值