linux系统-CPU占用率过高排查思路-mysql篇

通过servicemysqldstatus检查MySQL进程状态,使用top或htop命令查看线程占用情况。根据高占用率线程的PID,利用SQL查询information_schema和performance_schema获取执行的SQL信息,从而进行代码调优。
摘要由CSDN通过智能技术生成

  •  查看进程状态
    • service mysqld status
      
  • 打印信息
    • 打印信息中的 Main PID 就是进程ID
  • 查看进程对应线程状态
    • #top命令
      top -Hp PID
      #htop命令
      htop -p PID
    • 使用上面命令根据PID查询该进程对应的线程
    • 从打印信息中就可以清晰的看到每个线程的占用情况,这个时候只需要找到占用率最高的那个线程的PID记在小本本上
  • 查找线程执行的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 = 记在小本本上的PID
      		or b.thread_os_id = 可以写多个);
      

      通过上述sql语句就可以实现根据记在小本本上的PID查询出对应执行的sql信息,结果如下

    •  参数解析:

user用户
host地址+端口号
db数据库
thread_os_id系统内部分配的线程ID,当然,OS不会为每一个会话创建os_id
thread_id仅在perforamance_schema中使用,是其内部自动增长的计数器,前台和后台线程均有这个id,且thread_id和thread_os_id相关联
processlist_id一般在mysql层使用,跟前台登录会话相关联,是真正的线程ID。
processlistid和前台用户直接相关,每创建一个登录会话,就会新增一个processlistid。
在performance_schema.threads表中,后台线程没有processlistID的值,这个值是NULL,这是因为后台线程不是登录用户所创建的,但是前后台线程都会有thread_os_id和thread_id的值,因为所有线程最终都要依赖OS线程执行,thread_id和thread_os_id有一定的对应关系
command当前执行sql的类型,查询,修改,删除,新增
time时间
state状态
info具体执行的sql语句
  •  优化建议

根据info中的sql信息,用于定位我们代码中的调用的位置,然后根据实际情况进行进一步优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱做梦的小咸鱼

对您提供帮助,是我的荣幸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值