開發過程遇到sql? 執行時間長,又取消不了的情況? 可使用? kill query ID? 殺死進程
獲取正在運行的sql
SELECT ID, -- 進程ID:MySQL服務器分配給每個連接的唯一標識符,用于區分不同的客戶端連接USER, -- 用戶賬號:建立當前數據庫連接的用戶名稱TIME, -- 執行時間(秒):該查詢已經執行的持續時間,單位是秒LEFT(INFO, 100) AS sql_preview, -- SQL預覽:當前正在執行的SQL語句的前100個字符,用于快速了解查詢內容CASE WHEN TIME > 300 THEN 'CRITICAL - 立即處理' -- 執行超過5分鐘:嚴重級別,需要立即干預WHEN TIME > 60 THEN 'WARNING - 需要關注' -- 執行1-5分鐘:警告級別,需要關注ELSE '正常' -- 執行時間正常:無需特別處理END AS severity -- 嚴重程度:根據執行時間自動分類的嚴重級別
FROM INFORMATION_SCHEMA.PROCESSLIST -- 系統視圖:包含MySQL服務器中所有活躍連接的信息
WHERE TIME > 30 -- 過濾條件:只顯示執行時間超過30秒的查詢
AND COMMAND != 'Sleep' -- 排除條件:過濾掉空閑的睡眠連接(沒有活躍查詢的連接)
AND INFO IS NOT NULL -- 排除條件:確保只顯示有實際SQL語句的查詢
ORDER BY TIME DESC; -- 排序方式:按執行時間降序排列,最耗時的查詢排在最前面
殺死進程
kill query 12098013
各字段詳細解釋:
1.?ID?(進程ID)
作用:MySQL服務器為每個客戶端連接分配的唯一數字標識
重要性:用于識別特定連接,可以通過?
KILL ID
?命令終止問題查詢示例值:12345
2.?USER?(用戶賬號)
作用:顯示建立數據庫連接的用戶名稱
重要性:幫助識別是哪個用戶或應用程序執行的慢查詢
示例值:
app_user@192.168.1.100
3.?TIME?(執行時間)
作用:查詢已經運行的秒數
重要性:是判斷查詢性能的關鍵指標,時間越長說明問題越嚴重
單位:秒
監控閾值:
30秒:需要關注
60秒:警告級別
300秒:嚴重級別
4.?sql_preview?(SQL預覽)
作用:顯示正在執行的SQL語句的前100個字符
重要性:快速了解查詢內容,幫助診斷問題
限制:只顯示前100字符,完整SQL可能需要進一步查詢
5.?severity?(嚴重程度)
作用:根據執行時間自動分類的嚴重級別
分級標準:
正常:30-60秒,需要監控
警告:1-5分鐘,需要關注和優化
嚴重:超過5分鐘,立即處理
過濾條件解釋:
1.?WHERE TIME > 30
只關注執行時間超過30秒的查詢,避免顯示大量正常查詢
2.?AND COMMAND != 'Sleep'
排除空閑連接(
Sleep
狀態),只顯示活躍查詢
3.?AND INFO IS NOT NULL
確保只顯示有實際SQL語句的查詢,排除系統進程