show processlist查看非sleep的sql語句


前言

有時我們需要去查mysql內部的執行情況時,要在mysql中查詢進程,需要用到show processlist或者show full processlist兩條命令。那么我們會發現,大部分的命令,其狀態都是sleep的。

我們去查sleep的進程,本質上是沒啥用的。所以,我們最好可以過濾掉sleep的進程,然后去檢查有用的信息。

正文

鑒於show processlist和show full processlist是去查詢information_schema庫的processlist表,所以我們先看一下它的結構。

各個字段解釋如下:

  • ID: sql語句的id
  • USER: 執行sql語句的用戶
  • HOST: 在哪台機上執行的
  • DB: 在哪個數據庫執行的
  • COMMAND: 什么類型的sql語句,例如是查詢(query),休眠(sleep),或者后台常駐(daemon)
  • TIME: 耗時多久
  • Info: 語句的具體內容

於是我們如果要查詢非sleep的語句,則需要使得COMMAND項不等於'sleep'。

所以,我們可以這樣寫sql語句:

SELECT * FROM information_schema.processlist WHERE command != 'Sleep'\G;

當然,我們也可以添加其他的選項,例如對time進行修改、對user進行控制等。例如下面這個sql:

SELECT * FROM information_schema.processlist WHERE command != 'Sleep' and time>1 and user <> 'system user' and user <> 'replicator' order by time\G;  #查找狀態不是sleep,非系統用戶和集群同步用戶,執行時間大於1s的sql,按照時間長短由長到短進行排序

當然如果要kill掉某個進程,可直接在mysql中kill ID即可。

例如,我要kill掉ID號為1000的sql,那么我可以直接:

kill 1000;

即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM