Profiling 是會話級的效能分析工具,能細分 SQL 各階段耗時(解析、優化、執行、鎖等待、發送資料等),適合開發調優。
SET profiling = 1; -- 開啟 SET profiling = 0; -- 關閉
資訊儲存在 information_schema.PROFILING 表。
-- 1. 開啟 SET profiling = 1; -- 2. 執行目標 SQL SHOW DATABASES; USE information_schema; SELECT * FROM PROFILING LIMIT 1; -- 3. 查看概覽 SHOW PROFILES; -- 輸出:Query_ID, Duration, Query -- 4. 查看某查詢詳細階段 SHOW PROFILE FOR QUERY 1; -- 或 SHOW PROFILE CPU, BLOCK IO FOR QUERY 1;
| 階段 | 含義 | 優化方向 |
|---|---|---|
| starting | 查詢開始 | -- |
| checking permissions | 權限檢查 | -- |
| Opening tables | 開啟表 | table_open_cache 偏小 |
| System lock | 系統鎖 | 表鎖爭用 |
| optimizing | 優化器生成計畫 | 統計資訊過期 |
| executing | 執行階段 | 全表掃描/鎖等待 |
| Sending data | 發送資料給客戶端 | 結果集過大/網路延遲 |
| end | 結束 | -- |
Performance Schema 或 EXPLAIN ANALYZE。SHOW PROFILE 需 SELECT 權限於 information_schema.PROFILING。Profiling 是輕量級 SQL 微觀分析利器。配合 EXPLAIN 宏觀計畫,能快速定位「慢在哪裡、慢在什麼階段」。