天天看点

mysql processlist 解释_Mysql show processlist命令解析

1 解析show processlist

1. 作用

就是查看当前mysql正在执行的进程,主要有两个作用:

(1)查看慢查询的sql是哪个

(2)查看出现锁的sql是哪个

2. 查看命令

mysql> show processlist;

+-----+-------------+--------------------+-------+---------+-------+

| Id | User | Host           | db  | Command | Time| State    | Info

+-----+-------------+--------------------+-------+---------+-------+

|207|root |192.168.0.20:51718 |mytest | Sleep   | 5   |        | NULL

1

2

3

4

5

6

7

8

9

mysql>showprocesslist;

+-----+-------------+--------------------+-------+---------+-------+

|Id|User|Host     |db |Command|Time|State  |Info

+-----+-------------+--------------------+-------+---------+-------+

|207|root|192.168.0.20:51718|mytest|Sleep |5 |    |NULL

有时候,无法显示出完整的sql,可以通过如下命令显示出完整的sql

mysql> show full processlist \G;

*************************** 1. row ***************************

Id: 19161

User: root

Host: 172.21.195.56:58045

db: NULL

Command: Query

Time: 434

State: updating

Info: delete FROM fee_statistics.user_asset_daily where settle_date > '2017-04-26' and settle_date < '2017-05-01'

1

2

3

4

5

6

7

8

9

10

mysql>showfullprocesslist\G;

***************************1.row ***************************

Id:19161

User:root

Host:172.21.195.56:58045

db:NULL

Command:Query

Time:434

State:updating

Info:deleteFROMfee_statistics.user_asset_dailywheresettle_date>'2017-04-26'andsettle_date

3. command字段

该字段的取值主要有:query和sleep两种结果。

(1)关注就是query命令。

(2)值为 sleep的理解

sleep是在等待prestatement(sql语句),它已经建立了connect,但是还没有开始执行,所以sleep状态多的话,那么数据库连接池就会被占用。所以:有时候sleep增多的原因可能是慢查询sql,但是sleep不是慢查询,因为它还没有开始执行。

4. state字段

关心的值是locked

2 查看慢查询

1. 慢查询,针对的是超过一定时间的查询。所以此时只需要关注两个因素:

(1)command字段,值为query表示的是查询操作。

(2)time字段,显示的查询时间。

2. 从网上找到的kil慢查询的方法

(1)第一步 查找出慢查询sql对应的进程id

select id from prosslist where COMMAND = 'query' and time > 60*10

1

selectidfromprosslistwhereCOMMAND='query'andtime>60*10

time字段的单位是秒,上面是查找10分钟慢查询sql

(2)第二步 kill掉查找到慢查询,在mysql客户端执行如下:kill 3;

3 查看死锁

可以查看state为“locked”的状态的查询,就是死锁的查询,然后通过info字段获取这个sql语句。

1. 延伸:一个kill死锁的进程的脚本

(1)第一步

mysql -u root -e "show processlist" | grep -i "Locked" >> locked_log.txt

1

mysql-uroot-e"show processlist"|grep-i"Locked">>locked_log.txt

(2)第二步

for line in `cat locked_log.txt | awk '{print $1}'`

do

echo "kill $line;" >> kill_thread_id.sql

done

1

2

3

4

forlinein`catlocked_log.txt|awk'{print $1}'`

do

echo"kill $line;">>kill_thread_id.sql

done

现在kill_thread_id.sql的内容像这个样子 kill 66402982;