1. 程式人生 > >mysql sending data的狀態導致資料庫很慢及無法DDL 操作

mysql sending data的狀態導致資料庫很慢及無法DDL 操作

sending data狀態表示兩種情況,一種是mysql已經查詢了資料,正在發給客戶端;另一種情況是,mysql已經知道某些資料需要去什麼地方讀取,正在從資料檔案中讀取;

說明:最近幫忙定位一個mysql查詢很慢的問題,定位過程綜合各種方法、理論、工具排查問題。

【問題現象】從mysql查詢資料的時候,查詢的記錄數才幾條,但查詢的速度非常慢,大概要1分鐘左右,平時查詢30毫秒。

【處理過程】方法一:檢視當前執行的SQL(SHOW PROCESSLIST )


發現很長一段時間,查詢都處在 “Sending data”狀態,這裡的關鍵是Sending dataUPDATE資料

方法二: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相關程序,更改業務需求。