天天看點

mysql processlist 解釋_MySQL資料庫show processlist指令使用解析

在實際項目開發中,如果我們對資料庫的壓力比較大,比如有大批量的查詢或者插入等sql,尤其是多線程插入等情況,針對部分執行比較慢的sql,我們可以将其kill掉,常用的一個指令就是show processlist

1. show processlist是什麼

show processlist:通過檢視mysql的官網,可以發現,其主要是查詢資料庫中哪些線程正在執行,針對比較慢的線程(time的數值比較大的線程)我們可以将其kill掉。此外,show full processlist 傳回的結果是實時變化的。

2. show processlist怎麼用

有三種方式可以執行show processlist,可以通過指令行、SQL語句、Navicat用戶端等。

1) 指令行:SHOW FULL PROCESSLIST\G

執行結果如下:

mysql> SHOW FULL PROCESSLIST\G

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

Id: 1

User: system user

Host:

db: NULL

Command: Connect

Time: 1030455

State: Waiting for master to send event

Info: NULL

*************************** 2. row ***************************

Id: 2

User: system user

Host:

db: NULL

Command: Connect

Time: 1004

State: Has read all relay log; waiting for the slave

I/O thread to update it

Info: NULL

*************************** 3. row ***************************

Id: 3112

User: replikator

Host: artemis:2204

db: NULL

Command: Binlog Dump

Time: 2144

State: Has sent all binlog to slave; waiting for binlog to be updated

Info: NULL

*************************** 4. row ***************************

Id: 3113

User: replikator

Host: iconnect2:45781

db: NULL

Command: Binlog Dump

Time: 2086

State: Has sent all binlog to slave; waiting for binlog to be updated

Info: NULL

*************************** 5. row ***************************

Id: 3123

User: stefan

Host: localhost

db: apollon

Command: Query

Time: 0

State: NULL

Info: SHOW FULL PROCESSLIST

rows in set (0.00 sec)

2) 可以通過sql語句查詢資料庫中相關資訊的表

select id, db, user, host, command, time, state, info from information_schema.processlist order by time desc

3) 可以通過Navicat工具檢視,如下圖是使用Navicat查詢到的截圖。

3. show processlist怎麼解讀

下面對于使用該指令查詢到的結果進行解讀。

Id:連結mysql 伺服器線程的唯一辨別,可以通過kill來終止此線程的連結。

User:目前線程連結資料庫的使用者

Host:顯示這個語句是從哪個ip 的哪個端口上發出的。可用來追蹤出問題語句的使用者

db: 線程連結的資料庫,如果沒有則為null

Command: 顯示目前連接配接的執行的指令,一般就是休眠或空閑(sleep),查詢(query),連接配接(connect)

Time: 線程處在目前狀态的時間,機關是秒

State:顯示使用目前連接配接的sql語句的狀态,很重要的列,後續會有所有的狀态的描述,請注意,state隻是語句執行中的某一個狀态,一個 sql語句,已查詢為例,可能需要經過copying to tmp table,Sorting result,Sending data等狀态才可以完成

Info: 線程執行的sql語句,如果沒有語句執行則為null。這個語句可以使用戶端發來的執行語句也可以是内部執行的語句

4. show processlist結果怎麼處理

在上面的步驟中,我們可以查到每個線程的執行時間等資訊,是以針對執行時間比較長的線程,我們可以直接将其kill掉,直接執行 kill Id号即可。

如果要查時間超過5分鐘的,可以拼接并執行以下sql

select concat('kill ', id, ';') from information_schema.processlist where command != 'Sleep' and time > 5*60 order by time desc

以上就是本文的全部内容,希望對大家的學習有所幫助,也希望大家多多支援腳本之家。