1. 程式人生 > 資料庫 >MySQL資料庫show 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

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