線上慢SQL排查

2021-10-25 12:24:11 字數 1446 閱讀 7921

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;

線上問題排查

問題排查方 長期改進建議 由於業務應用 bug 本身或引入第三方庫 環境原因 硬體問題等原因,線上服務出現故障 問題幾乎不可避免。例如,常見的現象包括請求超時 使用者明顯感受到系統發生卡頓等等。作為乙個合格的研發人員 技術人員 不僅要能寫得一手好 掌握如何排查問題技巧也是研發人高階必須掌握的實戰技能...

排查mysql響應慢 MySQL反應慢排查思路

資料庫異常假死排查需要資料 當時問題的時間,前後時間在2個小時的資料就行 1.mysql相關配置 整體可以借助於pt mysql summary生成 percona tools工具 2.作業系統方面 var log message 核心日誌 硬體基本資訊,可以借助於pt summary資訊 perc...

線上故障排查(2019 12 02)

背景介紹 一 背景介紹 二 排查過程 服務列表 服務名稱 介紹ms crf 主應用ms base org 使用者服務 ms hrpaccoint 賬號服務 主應用ms crf專案新增使用者報錯,經過查詢服務日誌是呼叫ms base org使用者服務時候報 系統錯誤 查詢ms base org服務日誌...