很多新手不太清楚如何使用Mysql show processlist解决问题。为了帮助大家解决这个问题,下面小编就为大家详细讲解一下。有这种需求的人可以学习,希望你能有所收获。
Mysql显示完整进程列表查看当前线程处理。
从00: 00到1010,每次执行过程中看到的结果应该会发生变化。因为是实时的,所以我把它定义为“事件现场”,每次执行相当于现场的一个快照。
通常,show processlist或show full processlist用于检查mysql是否有压力,正在运行哪些语句,当前语句花费了多长时间,以及是否有任何缓慢的sql正在执行。
可以看到链接总数和哪些线程有问题(时间是执行秒的数量,所以要多关注那些时间长的),然后就可以干掉有问题的线程,可以暂时解决一些意想不到的问题。
有时快照可能不会显示任何问题,因此您可以经常刷新它。
事发现场
show full processlist可以看到所有的链接,但是大部分链接的状态实际上是Sleep,而这类链接实际上是空闲的,几乎没有什么查看价值。
我们想要观察的是有问题的,所以我们可以过滤它:
-查询非休眠状态的链接,根据消耗的时间倒序显示,自行筛选选择id、db、用户、主机、命令、时间、状态、infofrom information _ schema . processlistwencommand!=“睡眠”顺序
这样,我们可以过滤出哪些正在工作,然后根据消耗的时间以倒叙的方式显示出来。顶部的链接可能是一个有问题的链接。然后,通过查看info列,我们可以看到具体执行了哪些SQL语句。用于分析。
显示列说明:
id-thread身份证,可以是:杀人身份证;杀死一个线程非常有用。
db-Database
user-user.
host-the图书馆的主机知识产权。
command-currently执行命令,例如最常见的命令:睡眠、查询、连接等。
time-Time-consuming,每秒,非常有用。
state-Execution状态,如发送数据、分组排序、创建tmp表、锁定等。很有用。其他状态请参考本文末尾的参考文章。
info-SQL语句的执行,非常有用。
问题排查
上面提到的线程ID可以通过kill杀死;所以基本上上面有问题的执行语句都可以找出来,然后就可以杀了,要不要一个一个的杀?
-查询执行时间超过2分钟的线程,然后将它们拼接成kill语句selectconcat('kill ',id ','。)from information _ schema . processlisthwhere command!=“睡眠”和时间2*60orderbytimedesc
下一步就不需要讲了,只要运行一次拼接杀的执行结果,就搞定了。
有时候这个很好用。谁知道是谁用的?
kill 使用
有些问题会引发连锁反应,定位不准。有时它们被认为是缓慢的查询。很可能大部分时间都在等待CPU和内存资源的释放,所以有时候同一个查询消耗的时间差异很大。
总结了一些常见的问题:
CPU报警:很可能在SQL中有更多的计算。
连接数超高:很有可能存在速度较慢的查询,然后会有许多查询排队。排除问题时,可以看到大量类似“事件场景”的SQL语句。那么可能没有索引或者索引不好用。可以用:说明看完以上内容对你分析SQL语句是否有帮助。如果您想了解更多相关知识或阅读更多相关文章,请关注行业资讯频道,感谢您的支持。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/46790.html