首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

MySQL 查詢當前執行 SQL 與慢查詢診斷全流程

     編輯:關於SqlServer

問題場景

當資料庫回應變慢,或懷疑有長時間執行的查詢阻塞系統時,需快速定位當前正在執行的 SQL 語句並分析執行計劃。本文記錄 MySQL 官方工具鏈的標準診斷流程。

步驟一:檢查伺服器狀態與慢查詢計數

執行 status 命令,重點關注 Slow_queries 數值:

MySQL> status;
--------------
MySQL Ver 11.18 Distrib 3.23.58, for redhat-Linux-gnu (i386)
Connection id: 53
Current database: (null)
Current user: root@localhost
...
Uptime: 4 days 16 hours 49 min 57 sec
Threads: 1  Questions: 706  Slow_queries: 0  Opens: 177  Flush tables: 1
Open tables: 52  Queries per second avg: 0.002
--------------

若 Slow_queries 長期大於 0 且持續增長,說明存在執行時間過長的查詢,需進一步排查。

步驟二:檢視當前執行緒與執行中 SQL

使用 SHOW PROCESSLIST 列出所有連線與當前命令:

MySQL> SHOW PROCESSLIST;
+----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host      | db   | Command | Time | State | Info             |
+----+------+-----------+------+---------+------+-------+------------------+
| 53 | root | localhost | NULL | Query   | 0    | NULL  | show processlist |
+----+------+-----------+------+---------+------+-------+------------------+

關鍵欄位說明:

  • Id:連線執行緒 ID,可用於 KILL 強制中斷。
  • Time:該狀態已持續秒數,數值大者為疑似慢查詢。
  • State:當前狀態(如 Sending data、Locked、Copying to tmp table)。
  • Info:正在執行的 SQL 片段(長語句會被截斷)。

步驟三:分析慢查詢執行計劃

鎖定可疑 SQL 後,使用 EXPLAIN 查看執行計劃:

EXPLAIN SELECT * FROM large_table WHERE condition = 'value';

重點檢查:

  • type:存取類型(ALL=全表掃描、ref/range/index=索引掃描)
  • key:實際使用的索引
  • rows:預估掃描行數
  • Extra:額外資訊(Using where、Using filesort、Using temporary 等)

進階工具建議

  • 慢查詢日誌:啟用 slow_query_log 記錄超過 long_query_time 的語句,配合 mysqldumpslow 或 pt-query-digest 分析。
  • Performance Schema:MySQL 5.6+ 內建,提供更細緻的語句級統計。
  • sys schema:官方封裝的易讀視圖,如 sys.statements_with_runtimes_in_95th_percentile。

小結

status → SHOW PROCESSLIST → EXPLAIN 是 MySQL 現場排查的「鐵三角」。養成定期檢視慢查詢日誌的習慣,能從被動救火轉為主動優化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved