学会用 Mysql show processlist 排查问题

学会用 Mysql show processlist 排查问题

大家好,又见面了,我是全栈君。

mysql show full processlist 查看当前线程处理情况

事发现场

每次执行看到的结果应该都有变化,因为是实时的,所以我定义为:“事发现场”,每次执行就相当于现场的快照

一般用到 show processlist 或 show full processlist 都是为了查看当前 mysql 是否有压力,都在跑什么语句,当前语句耗时多久了,有没有什么慢 SQL 正在执行之类的

可以看到总共有多少链接数,哪些线程有问题(time是执行秒数,时间长的就应该多注意了),然后可以把有问题的线程 kill 掉,这样可以临时解决一些突发性的问题

有时候一个快照可能看不出什么问题,那么可以频发的刷新试试

问题排查

show full processlist 可以看到所有链接的情况,但是大多链接的 state 其实是 Sleep 的,这种的其实是空闲状态,没有太多查看价值

我们要观察的是有问题的,所以可以进行过滤:

-- 查询非 Sleep 状态的链接,按消耗时间倒序展示,自己加条件过滤
select id, db, user, host, command, time, state, info
from information_schema.processlist
where command != 'Sleep'
order by time desc 

这样就过滤出来哪些是正在干活的,然后按照消耗时间倒叙展示,排在最前面的,极大可能就是有问题的链接了,然后查看 info 一列,就能看到具体执行的什么 SQL 语句了,针对分析 学会用 Mysql show processlist 排查问题

展示列解释:

  • id – 线程ID,可以用:kill id; 杀死一个线程,很有用

  • db – 数据库

  • user – 用户

  • host – 连库的主机IP

  • command – 当前执行的命令,比如最常见的:Sleep,Query,Connect 等

  • time – 消耗时间,单位秒,很有用

  • state – 执行状态,比如:Sending data,Sorting for group,Creating tmp table,Locked等等,很有用,其他状态可以看看本文最后的参考文章

  • info – 执行的SQL语句,很有用

kill 使用

上面提到的 线程ID 是可以通过 kill 杀死的;所以上面基本上可以把有问题的执行语句找出来,然后就可以 kill 掉了,那么一个一个来 kill 么?

-- 查询执行时间超过2分钟的线程,然后拼接成 kill 语句
select concat('kill ', id, ';')
from information_schema.processlist
where command != 'Sleep'
and time > 2*60
order by time desc 

在下一步我就不用说了吧,把拼接 kill 的执行结果跑一遍就搞定了

这个有时候非常好用,谁用谁知道

常见问题

一些问题会导致连锁反应,而且不太好定位,有时候以为是慢查询,很可能是大多时间是在等在CPU、内存资源的释放,所以有时候同一个查询消耗的时间有时候差异很大

总结了一些常见问题:

CPU报警:很可能是 SQL 里面有较多的计算导致的

连接数超高:很可能是有慢查询,然后导致很多的查询在排队,排查问题的时候可以看到”事发现场“类似的 SQL 语句一大片,那么有可能是没有索引或者索引不好使,可以用:explain 分析一下 SQL 语句

学会用 Mysql show processlist 排查问题

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111948.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 机器学习之隐马尔可夫模型

      本文主要是学习笔记,一方面是为了加强理解,感觉在做笔记过程中理解起来更简单,另一方面为了加强记忆,建立大脑关于‘隐马尔可夫模型’的神经网络1.模型场景在介绍隐马尔可夫模型

    2021年12月30日
    59
  • c语言findstr 用法,常用批处理命令总结之Find和FindStr

    c语言findstr 用法,常用批处理命令总结之Find和FindStrfind 作用 从文件中收索字符串格式 find 参数 字符串 路径 文件名参数 V 显示所有未包含指定字符串的行 C 仅显示包含字符串的行数 N 显示行号 I 搜索字符串时忽略大小写 OFF LINE 不要跳过具有脱机属性集的文件 当文件中包含要查找的字符串时 将返回这个字符串所在位置的整行内容 默认情况下是区分大小写的 若想要不区分大小写就是用参数 i 有时候 我们的需求并

    2025年10月31日
    5
  • 索引与视图

    索引与视图1.单列索引与多列索引一个多列索引可以认为是包含通过合并(concatenate)索引列值创建的值的一个排序数组。当查询语句的条件中包含last_name和first_name时SELECT*FROMtestWHERElast_name=’Kun’ANDfirst_name=’Li’;sql会先过滤出last_name符合条件的记录,在其基础上在过滤first_n…

    2022年7月22日
    8
  • java 发送邮件添加附件_java发送邮件 发送带附件的邮件详解[通俗易懂]

    java 发送邮件添加附件_java发送邮件 发送带附件的邮件详解[通俗易懂]importjava.io.File;importjava.util.Date;importjavax.activation.DataHandler;importjavax.activation.FileDataSource;importjavax.mail.Address;importjavax.mail.BodyPart;importjavax.mail.Message;impo…

    2022年5月14日
    38
  • tcpip四次握手三次挥手_tcp四次挥手的全过程

    tcpip四次握手三次挥手_tcp四次挥手的全过程“TCP/IP协议可以说是整个互联网的基石。”01—TCP是什么?为了直接认识TCP是什么,直接在命令行执行:tcpdump是在linux下的一款很好用的抓包工具,(运行此命令需要root权限)。$sudotcpdumpPassword:tcpdump:d…

    2022年10月3日
    5
  • 约束条件(constraint)「建议收藏」

    约束条件(constraint)「建议收藏」1.为啥使用约束条件:约束条件也叫完整性约束条件,当对表中的数据做DML操作时会验证数据是否违反约束条件.如果违反了DML操作会失败.约束条件可以应用于表中的一列或几列,应用于整个表或几个表之间.约束条件分类:非空(NOTNULL),唯一(UNIQUE),主键(PRIMARYKEY),外键(FOREIGNKEY),检查(CHECK).其中NOTNULL只能应用于列.

    2022年10月13日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号