版本定位
MySQL 5.5 系列第三個里程碑版 (Milestone 3),標誌著 Performance Schema 正式引入,為資料庫效能診斷提供原生、低開銷的儀表板。
核心新功能:Performance Schema
- 資料庫名:
performance_schema
- 儲存引擎:
PERFORMANCE_SCHEMA (記憶體引擎,非持久化)
- 功能: 收集伺服器運行時事件等待、鎖、階段、語句、交易、記憶體分配等細粒度效能數據
- 啟用方式: 啟動參數
--performance_schema=ON (預設關閉)
關鍵表結構速覽
| 表分類 | 代表表 | 用途 |
| 設定/啟用控制 | setup_actors, setup_objects, setup_instruments, setup_consumers | 決定採集哪些事件、哪些執行緒、哪些物件 |
| 當前事件等待 | events_waits_current | 即時觀察正在等待什麼 (I/O、鎖、網路) |
| 歷史事件等待 | events_waits_history, events_waits_history_long | 最近 N 次等待記錄 |
| 語句摘要 | events_statements_summary_by_digest | 按 SQL 指紋聚合統計:執行次數、平均延遲、掃描行數 |
| 檔案 I/O 摘要 | file_summary_by_instance | 每個資料檔/日誌檔的讀寫延遲、位元組數 |
| 記憶體摘要 | memory_summary_global_by_event_name | 各類記憶體分配統計 |
實戰查詢範例
-- Top 10 最耗時 SQL (需啟用 statements 消費者)
SELECT DIGEST_TEXT, COUNT_STAR, AVG_TIMER_WAIT/1e12 AS avg_sec, SUM_ROWS_EXAMINED
FROM performance_schema.events_statements_summary_by_digest
ORDER BY AVG_TIMER_WAIT DESC LIMIT 10;
-- 當前阻塞查詢
SELECT r.THREAD_ID, r.EVENT_ID, r.SQL_TEXT, b.BLOCKING_THREAD_ID
FROM performance_schema.events_statements_current r
JOIN performance_schema.events_waits_current b ON r.THREAD_ID = b.THREAD_ID
WHERE b.EVENT_NAME LIKE 'wait/lock/%';
-- 表 I/O 熱點
SELECT FILE_NAME, SUM_NUMBER_OF_BYTES_READ, SUM_NUMBER_OF_BYTES_WRITE
FROM performance_schema.file_summary_by_instance
ORDER BY SUM_NUMBER_OF_BYTES_READ + SUM_NUMBER_OF_BYTES_WRITE DESC LIMIT 20;
對比優勢
| 維度 | Performance Schema | 慢查詢日誌 | SHOW PROCESSLIST |
| 粒度 | 事件級 (等待/鎖/階段) | 語句級 | 連線級 |
| 開銷 | 極低 (記憶體環狀緩衝) | 磁碟 I/O | 鎖競爭高 |
| 歷史回溯 | 有限 (配置大小) | 完整 (保留天數) | 無 |
| 生產適用 | ✅ 建議永久開啟 | ✅ 必開 | ⚠️ 僅診斷時 |
升級建議
- 測試環境驗證
performance_schema 記憶體佔用 (通常 50~200MB)
- 生產環境啟用核心消費者:
UPDATE setup_consumers SET ENABLED='YES' WHERE NAME LIKE '%statements%' OR NAME LIKE '%waits%';
- 結合
sys schema (官方視圖庫) 簡化查詢:SELECT * FROM sys.schema_table_statistics;