mysql sending data的狀態導致資料庫很慢及無法DDL 操作
阿新 • • 發佈:2019-01-28
sending data狀態表示兩種情況,一種是mysql已經查詢了資料,正在發給客戶端;另一種情況是,mysql已經知道某些資料需要去什麼地方讀取,正在從資料檔案中讀取;
說明:最近幫忙定位一個mysql查詢很慢的問題,定位過程綜合各種方法、理論、工具排查問題。
【問題現象】從mysql查詢資料的時候,查詢的記錄數才幾條,但查詢的速度非常慢,大概要1分鐘左右,平時查詢30毫秒。
【處理過程】方法一:檢視當前執行的SQL(SHOW PROCESSLIST )
發現很長一段時間,查詢都處在 “Sending data”狀態,這裡的關鍵是“Sending data”UPDATE資料。
方法二:show profile
注:由於使用阿里雲實例有很多不方便的地方。
使用了show profile命令來檢視詳細的時間分佈
首先開啟配置:set profiling=on;
執行完查詢後,使用show profiles檢視query id;
使用show profile for query query_id檢視詳細資訊;
方法三:information_schema.processlist
SELECT concat('KILL ',id,';')FROM information_schema.processlist WHERE time>=500;
【問題原因】
注:MYSQL版本是5.6.16
由於開發人員使用MySQL Event Scheduler事件,
【解決方法】KILL相關程序,更改業務需求。