一、show processlist 简介
show processlist
是显示用户正在运行的线程,需要注意的是,除了root
用户能看到所有正在运行的线程外,其他用户都只能看到自己正在运行的线程,看不到其它用户正在运行的线程。除非单独个这个用户赋予了PROCESS
权限。
通常我们通过top检查发现mysqlCPU或者iowait过高 那么解决这些问题 都离不开show
processlist查询当前mysql有些线程正在运行,然后分析其中的参数,找出那些有问题的线程,该kill的kill,该优化的优化!
注意: show processlist
只显示前100条 我们可以通过show full processlist
显示全部。
root
用户,可以看到全部线程运行情况
mysql> show processlist ;
+---------+-------------+---------------------+--------------------+---------+------+--------------+------------------------------------------------------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+---------+-------------+---------------------+--------------------+---------+------+--------------+------------------------------------------------------------------------------------------------------+
| 9801429 | lis | 10.41.7.10:57962 | lis | Query | 8 | Sending data | SELECT r.RgtantMobile, r.RgtantName, r.RgtNo, ag.SumGetMoney, ag.EnterAccDate, ag.BankAccNo, ( SELEC |
| 9802020 | ruihua | 10.41.5.6:37543 | sales_org | Sleep | 292 | | NULL |
| 9802070 | lis | 10.41.7.10:58998 | lis | Query | 8 | Sending data | select distinct d.contno,e.phone,d.appntidtype,d.appntidno,d.appntname,d.appntsex ,d.AppntBirthday,( |
| 9802084 | evoiceadmin | 10.41.8.8:41868 | evoicerh | Sleep | 57 | | NULL |
| 9802201 | root | 10.41.100.3:38976 | NULL | Query | 0 | init | show processlist |
+---------+-------------+---------------------+--------------------+---------+------+--------------+------------------------------------------------------------------------------------------------------+
148 rows in set (0.00 sec)
普通的lis用户只能看到自己的
mysql> show processlist ;
+---------+-------------+---------------------+--------------------+---------+------+--------------+------------------------------------------------------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+---------+-------------+---------------------+--------------------+---------+------+--------------+------------------------------------------------------------------------------------------------------+
| 9801429 | lis | 10.41.7.10:57962 | lis | Query | 8 | Sending data | SELECT r.RgtantMobile, r.RgtantName, r.RgtNo, ag.SumGetMoney, ag.EnterAccDate, ag.BankAccNo, ( SELEC |
| 9802070 | lis | 10.41.7.10:58998 | lis | Query | 8 | Sending data | select distinct d.contno,e.phone,d.appntidtype,d.appntidno,d.appntname,d.appntsex ,d.AppntBirthday,( |
+---------+-------------+---------------------+--------------------+---------+------+--------------+------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
单独给普通的activiti
用户授PROCESS
权限,(授权后需要退出重新登录)
show processlist
显示的信息都是来自MySQL
系统库information_schema
中的processlist
表。所以使用下面的查询语句可以获得相同的结果:
select * from information_schema.processlist
二、show processlist 参数分析
参数 | 含义 |
---|---|
Id | 登录mysql后,系统分配的connection_id表示线程的唯一标识,可以使用函数connection_id()查看。当需要kill一个语句的时候会用到。前面我们说了show processlist显示的信息时来自information_schema.processlist表,所以这个Id就是这个表的主键。 |
User | 就是指启动这个线程的用户,如果是system user,它是指由服务器产生的非客户线程,以在内部处理任务。这可能是复制从站或延迟行处理程序使用的I/O或SQL线程。unauthenticated user指的是已经与客户端连接关联但是还没有完成客户机用户的认证的线程。event_scheduler指的是监视预定事件的线程。如果是system user那么在Host列中不会指定主机 。 |
Host | 记录了发送请求的客户端的IP和端口号。通过这些信息在排查问题的时候,我们可以定位到是哪个客户端的哪个进程发送的请求。 |
db | 当前执行的命令是在哪一个数据库上。如果没有指定数据库,则该值为 NULL 。 |
Command | 显示当前连接的执行的命令,一般就是休眠或空闲(sleep),查询(query),连接(connect)。这个很复杂,下面单独解释 |
Time | 表示该线程处于当前状态的时间,单位是秒。 |
State | 显示使用当前连接的sql语句的状态,很重要的列,后续会有所有的状态的描述,请注意,state只是语句执行中的某一个状态,一个 sql语句,已查询为例,可能需要经过copying to tmp table,Sorting result,Sending data等状态才可以完成 |
Info | 一般记录的是线程执行的语句。默认只显示前100个字符,也就是你看到的语句可能是截断了的,要看全部信息,需要使用 show full processlist。 |
原文链接:https://blog.csdn.net/zhengzhaoyang122/article/details/127839558