MySQL数据库show processlist指令使用解析
在实际项目开发中,如果我们对数据库的压力比较大,比如有大批量的查询或者插入等sql,尤其是多线程插入等情况,针对部分执行比较慢的sql,我们可以将其kill掉,常用的一个命令就是showprocesslist
1.showprocesslist是什么
showprocesslist:通过查看mysql的官网,可以发现,其主要是查询数据库中哪些线程正在执行,针对比较慢的线程(time的数值比较大的线程)我们可以将其kill掉。此外,showfullprocesslist返回的结果是实时变化的。
2.showprocesslist怎么用
有三种方式可以执行showprocesslist,可以通过命令行、SQL语句、Navicat客户端等。
1)命令行:SHOWFULLPROCESSLIST\G
执行结果如下:
mysql>SHOWFULLPROCESSLIST\G ***************************1.row*************************** Id:1 User:systemuser Host: db:NULL Command:Connect Time:1030455 State:Waitingformastertosendevent Info:NULL ***************************2.row*************************** Id:2 User:systemuser Host: db:NULL Command:Connect Time:1004 State:Hasreadallrelaylog;waitingfortheslave I/Othreadtoupdateit Info:NULL ***************************3.row*************************** Id:3112 User:replikator Host:artemis:2204 db:NULL Command:BinlogDump Time:2144 State:Hassentallbinlogtoslave;waitingforbinlogtobeupdated Info:NULL ***************************4.row*************************** Id:3113 User:replikator Host:iconnect2:45781 db:NULL Command:BinlogDump Time:2086 State:Hassentallbinlogtoslave;waitingforbinlogtobeupdated Info:NULL ***************************5.row*************************** Id:3123 User:stefan Host:localhost db:apollon Command:Query Time:0 State:NULL Info:SHOWFULLPROCESSLIST rowsinset(0.00sec)
2)可以通过sql语句查询数据库中相关信息的表
selectid,db,user,host,command,time,state,infofrominformation_schema.processlistorderbytimedesc
3)可以通过Navicat工具查看,如下图是使用Navicat查询到的截图。
3.showprocesslist怎么解读
下面对于使用该命令查询到的结果进行解读。
Id:链接mysql服务器线程的唯一标识,可以通过kill来终止此线程的链接。
User:当前线程链接数据库的用户
Host:显示这个语句是从哪个ip的哪个端口上发出的。可用来追踪出问题语句的用户
db:线程链接的数据库,如果没有则为null
Command:显示当前连接的执行的命令,一般就是休眠或空闲(sleep),查询(query),连接(connect)
Time:线程处在当前状态的时间,单位是秒
State:显示使用当前连接的sql语句的状态,很重要的列,后续会有所有的状态的描述,请注意,state只是语句执行中的某一个状态,一个sql语句,已查询为例,可能需要经过copyingtotmptable,Sortingresult,Sendingdata等状态才可以完成
Info:线程执行的sql语句,如果没有语句执行则为null。这个语句可以使客户端发来的执行语句也可以是内部执行的语句
4.showprocesslist结果怎么处理
在上面的步骤中,我们可以查到每个线程的执行时间等信息,因此针对执行时间比较长的线程,我们可以直接将其kill掉,直接执行killId号即可。
如果要查时间超过5分钟的,可以拼接并执行以下sql
selectconcat('kill',id,';')frominformation_schema.processlistwherecommand!='Sleep'andtime>5*60orderbytimedesc
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。