MySQL 5.0+ 引入的 SHOW PROFILE 類似 Oracle 10046 事件,能將 SQL 執行過程拆解為細粒度的狀態步驟,展示每步的持續時間、CPU 消耗、上下文切換、I/O 等指標,是定位慢查詢瓶頸的利器。
SELECT @@profiling; -- 查看當前狀態(0=關閉)
SET profiling = 1; -- 開啟,當前會話生效
注意:Profiling 已在 MySQL 5.6.7 起標記為廢棄,8.0 移除。新版建議使用 Performance Schema 或 EXPLAIN ANALYZE。
SELECT COUNT(1) FROM test1 t1, test2 t2;
SHOW PROFILE CPU, BLOCK IO FOR QUERY 1;
FOR QUERY n 指定第 n 條執行的語句(從 1 開始)。常用 type 組合:
ALL:所有可用指標CPU:用戶/系統 CPU 時間BLOCK IO:磁塊讀寫次數CONTEXT SWITCHES:上下文切換次數SOURCE:源碼函數名與行號(調試內核用)+--------------------------------+----------+-----------+------------+--------------+---------------+
| Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+--------------------------------+----------+-----------+------------+--------------+---------------+
| starting | 0.000006 | 0.000000 | 0.000000 | NULL | NULL |
| checking query cache for query | 0.000023 | 0.000000 | 0.000000 | NULL | NULL |
| Opening tables | 0.000026 | 0.000000 | 0.000000 | NULL | NULL |
| optimizing | 0.000004 | 0.000000 | 0.000000 | NULL | NULL |
| statistics | 0.000012 | 0.000000 | 0.000000 | NULL | NULL |
| preparing | 0.000022 | 0.000000 | 0.000000 | NULL | NULL |
| executing | 0.000002 | 0.000000 | 0.000000 | NULL | NULL |
| Sending data | 0.388263 | 0.375000 | 0.000000 | NULL | NULL | <-- 核心耗時
| end | 0.000017 | 0.000000 | 0.000000 | NULL | NULL |
| query end | 0.000008 | 0.000000 | 0.000000 | NULL | NULL |
| closing tables | 0.000014 | 0.000000 | 0.000000 | NULL | NULL |
| freeing items | 0.000006 | 0.000000 | 0.000000 | NULL | NULL |
| cleaning up | 0.000015 | 0.000000 | 0.000000 | NULL | NULL |
+--------------------------------+----------+-----------+------------+--------------+---------------+
重點關注 Duration 最大的階段(如 Sending data、Copying to tmp table、Sorting result),結合 CPU/BLOCK IO 判斷是計算密集還是 I/O 密集。
SHOW PROFILES:列出當前會話所有已記錄語句的 Query_ID 與耗時摘要。LIMIT row_count OFFSET offset:分頁顯示剖析明細。MySQL 8.0+ 請使用:
EXPLAIN ANALYZE SELECT ...:獲取實際執行計劃與每算子耗時。Performance Schema 表 events_statements_history_long 等進行歷史分析。sys.schema 視圖 statement_analysis 等聚合報表。SHOW PROFILE 為舊版本提供了極低門檻的 SQL 級性能剖析能力,掌握其輸出含義能快速定位「慢在哪兒」。新版本請轉向 Performance Schema 與 EXPLAIN ANALYZE 獲得更豐富、持久化的觀測數據。