首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL Profiling 常用命令與性能分析速查表

     編輯:MySQL 資料庫相關知識

MySQL 5.1+ 內建 Profiling 功能,配合 SHOW PROFILE、SHOW STATUS、EXPLAIN、Slow Log、OS 級工具,構建多維性能分析體系。本文匯總核心命令、變量、輸出解讀與實戰組合拳。

1. Profiling 開關與狀態

SHOW VARIABLES LIKE '%profiling%';
-- profiling=OFF (默認)
SET profiling = 1;  -- 當前 Session 開啟
SELECT @@profiling; -- 確認=1

2. 核心分析命令組合

命令用途典型場景
SHOW PROFILES列出最近執行語句的 Query_ID、總耗時、SQL 文本快速定位慢語句
SHOW PROFILE FOR QUERY #拆解指定 Query_ID 的執行階段耗時 (CPU、IPC、鎖、I/O 等)深度剖析單條 SQL
SHOW PROFILE CPU, BLOCK IO FOR QUERY #顯示 CPU 時間、塊 I/O 等待定位 CPU 密集或 I/O 瓶頸
FLUSH STATUS; SQL; SHOW STATUS;對比執行前後狀態變量增量量化 Handler_read_key、Created_tmp_tables 等
EXPLAIN SELECT ...查看優化器執行計劃 (type、key、rows、Extra)索引優化、連接優化
SHOW PROCESSLIST當前線程狀態、執行時間、SQL 文本實時阻塞排查

3. 關鍵狀態變量 (SHOW STATUS 重點關注)

  • Handler_read_key:索引讀取次數
  • Handler_read_rnd_next:全表掃描次數
  • Created_tmp_tables / Created_tmp_disk_tables:臨時表/落盤臨時表
  • Select_scan / Select_full_join:全表掃描/無索引連接
  • Sort_merge_passes:排序溢出磁盤次數
  • Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests:命中率 = 1 - reads/requests
  • Innodb_row_lock_waits / Innodb_row_lock_time_avg:行鎖等待

4. Slow Log 關鍵變量

SHOW VARIABLES LIKE '%slow_query%';
SHOW VARIABLES LIKE '%long_query_time%';
-- long_query_time=2 (建議 1~2 秒)
-- slow_query_log=ON
-- slow_query_log_file=/var/log/mysql/slow.log
-- log_queries_not_using_indexes=ON (慎用)
-- log_slow_admin_statements=ON

5. OS 級性能分析工具

工具關注指標
vmstat 1r (運行隊列)、b (阻塞)、si/so (換頁)、bi/bo (塊 I/O)、us/sy/id (CPU)
iostat -x 1%util (設備飽和)、await (平均等待)、svctm (服務時間)、rkB/s、wkB/s
mpstat -P ALL 1各 CPU 核心 us/sy/id/iowait
strace -p PID -c系統調用統計 (read/write/poll/futex 耗時佔比)
perf top -p PID函數級熱點 (需內核支援、debug 符號)

6. 實戰分析流程

  1. 開啟 Profiling,執行目標 SQL。
  2. SHOW PROFILES 找到 Query_ID,SHOW PROFILE CPU, BLOCK IO FOR QUERY # 看階段分布。
  3. 若 Sending data 佔比高 → EXPLAIN 檢查索引、Handler_read_rnd_next 確認全掃描。
  4. 若 Opening tables/Table lock 高 → 檢查 table_open_cache、鎖爭用。
  5. 若 Block I/O 高 → iostat 確認磁盤壓力、Innodb_buffer_pool_reads 確認命中率。
  6. 結合 Slow Log 歷史分析,制定優化方案 (加索引、改 SQL、調參數、升級硬體)。

7. 版本遷移提示

MySQL 5.7+ 棄用 SHOW PROFILE,官方推薦 Performance Schema:

SELECT * FROM performance_schema.events_statements_history_long
WHERE SQL_TEXT LIKE '%target%';
SELECT * FROM performance_schema.events_stages_history_long
WHERE EVENT_ID = ...;  -- 階段耗時

Performance Schema 預設開啟、持久化、支援更豐富的等待事件、內存/鎖/階段統計,學習成本略高但功能強大得多。

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