mysql慢SQL排查之show processlist和show full processlist


mysql排查線上數據庫問題,經常會用到 show processlist和show full processlist這兩條命令

     processlist命令的輸出結果顯示了有哪些線程在運行,不僅可以查看當前所有的連接數,還可以查看當前的連接狀態幫助識別出有問題的查詢語句等。

如果是root帳號,能看到所有用戶的當前連接。如果是其他普通帳號,則只能看到自己占用的連接。showprocesslist只能列出當前100條。如果想全部列出,可以使用SHOW FULL PROCESSLIST命令

 

各個列的含義:

1、id列,用戶登錄mysql時,系統分配的"connection_id",可以使用函數connection_id()查看
2、user列,顯示當前用戶。如果不是root,這個命令就只顯示用戶權限范圍的sql語句
3、host列,顯示這個語句是從哪個ip的哪個端口上發的,可以用來跟蹤出現問題語句的用戶
4、db列,顯示這個進程目前連接的是哪個數據庫
5、command列,顯示當前連接的執行的命令,一般取值為休眠(sleep),查詢(query),連接(connect)等
6、time列,顯示這個狀態持續的時間,單位是秒
7、state列,顯示使用當前連接的sql語句的狀態,很重要的列。state描述的是語句執行中的某一個狀態。一個sql語句,以查詢為例,可能需要經過copying to tmp table、sorting result、sending data等狀態才可以完成
8、info列,顯示這個sql語句,是判斷問題語句的一個重要依據,一般記錄的是線程執行的語句。默認只顯示前100個字符,也就是你看到的語句可能是截斷了的,要看全部信息,需要使用 show full processlist。

 

    備注:

          1、按客戶端的 IP 分組,查看各個客戶端的鏈接數情況

     select client_ip, count (client_ip) as client_num from ( select substring_index(host, ':' ,1) as client_ip from information_schema.processlist ) as connect_info group by client_ip order by client_num desc ;
         2、查看正在執行的線程,並按 Time 倒排序,看看有沒有執行時間特別長的線程
      select * from information_schema.processlist where Command != 'Sleep' order by Time desc ;
         3、找出所有執行時間超過 1 分鍾的線程,拼出 kill 語句串,方便后面殺死堵塞進程
      select concat( 'kill ' , id, ';' ) from information_schema.processlist where Command != 'Sleep' and Time > 60 order by Time desc ;

         


免責聲明!

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



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