SHOW [GLOBAL|SESSION] STATUS 輸出 300+ 計數器,是 MySQL 運行狀態的「體檢報告」。本文提煉 50+ 核心指標,按維度分類解讀,並給出異常閾值與排查方向,作為效能診斷速查字典。
連接與線程
| 變量 | 範圍 | 含義 | 異常信號 |
Connections | Global | 嘗試連接總數(含失敗) | 短時激增 = 連接風暴/未用連接池 |
Max_used_connections | Global | 歷史峰值併發連接數 | 接近 max_connections 需擴容 |
Threads_connected | Global | 當前打開連接數 | 持續高位 = 連接洩漏/池配置大 |
Threads_created | Global | 創建線程數(含緩存未命中) | Threads_created/Connections > 0.1 → 增大 thread_cache_size |
Threads_running | Global | 非睡眠狀態線程數 | 瞬間飆升 = 積壓/慢查詢/鎖等待 |
Aborted_connects | Global | 連接握手失敗數 | 網絡抖動/認證失敗/skip-name-resolve 未開 |
Aborted_clients | Global | 非正常斷開客戶端數 | 客戶端超時殺進程/網絡中斷 |
查詢與緩存
| 變量 | 範圍 | 含義 | 異常信號 |
Questions | Both | 發送給服務器的語句數 | QPS 基線 |
Queries | Both | 執行的語句數(含存儲過程內部) | Queries > Questions 正常 |
Slow_queries | Both | 超過 long_query_time 的查詢數 | 持續增長 = 需開啟慢查詢日志分析 |
Select_scan | Both | 全表掃描次數 | 高 = 缺索引/條件不命中 |
Select_full_join | Both | 無索引 JOIN 次數 | >0 立即檢查 JOIN 索引 |
Qcache_hits | Global | 查詢緩存命中數 | 命中率 < 20% 考慮關閉 QC |
Qcache_inserts | Global | 新增緩存條目數 | |
Qcache_lowmem_prunes | Global | 因內存不足淘汰次數 | 持續增 = 擴容或 FLUSH QUERY CACHE |
Qcache_not_cached | Global | 不可緩存查詢數 | 含非確定函數/大結果集 |
InnoDB 引擎核心
| 變量 | 含義 | 診斷方向 |
Innodb_buffer_pool_read_requests | 邏輯讀請求總數 | 命中率 = 1 - Innodb_buffer_pool_reads / read_requests,<99% 需擴容 BP |
Innodb_buffer_pool_reads | 物理讀頁數(未命中) | |
Innodb_buffer_pool_wait_free | 等待空閒頁數 | >0 = BP 太小或刷盤跟不上 |
Innodb_row_lock_waits | 行鎖等待次數 | 高 = 熱點行併發衝突 |
Innodb_row_lock_time_avg | 平均鎖等待毫秒 | >10ms 需優化熱點事務 |
Innodb_rows_inserted/read/updated/deleted | 行級增刪改查計數 | 業務流量基線 |
Innodb_data_pending_fsyncs | 待刷盤 fsync 數 | 持續 >0 = I/O 瓶頸 |
Innodb_log_waits | 等待重做日志寫入次數 | >0 = innodb_log_file_size 太小 |
臨時表與排序
| 變量 | 含義 | 異常處理 |
Created_tmp_tables | 內存臨時表數 | 正常 |
Created_tmp_disk_tables | 磁碟臨時表數 | Created_tmp_disk_tables / Created_tmp_tables > 0.1 → 擴大 tmp_table_size/max_heap_table_size 或優化 SQL 避免臨時表 |
Sort_merge_passes | 排序歸併次數 | 高 = sort_buffer_size 不足導致多輪歸併 |
Sort_scan | 全表掃描排序次數 | 高 = 缺索引/ORDER BY 無索引 |
表鎖與打開表
| 變量 | 含義 | 異常處理 |
Table_locks_waited | 等待表鎖次數 | MyISAM 高併發寫入典型問題,遷移 InnoDB |
Table_locks_immediate | 立即獲取表鎖次數 | |
Open_tables | 當前打開表數 | |
Opened_tables | 歷史打開表數 | Opened_tables / Uptime > 2/sec → 擴大 table_open_cache |
Open_table_definitions | 緩存 .frm 數 | 同理擴大 table_definition_cache |
網絡與傳輸
| 變量 | 含義 |
Bytes_sent / Bytes_received | 發送/接收字節總量 |
Com_* | 各類命令執行計數(Com_select, Com_insert...) |
實戰診斷三步法
- 基線建立: 穩定運行期采集 1 小時
SHOW GLOBAL STATUS 快照,記錄核心指標均值。
- 異常比對: 故障時再次采集,重點看
Threads_running、Slow_queries、Innodb_row_lock_waits、Created_tmp_disk_tables、Qcache_lowmem_prunes 是否偏離基線超 3 倍。
- 定向排查: 結合
SHOW PROCESSLIST、SHOW ENGINE INNODB STATUS、慢查詢日志、EXPLAIN 定位根因。
總結
SHOW STATUS 是 MySQL 的「生命體徵儀」。不必背誦 300+ 指標,**掌握 20 個核心計數器、建立業務基線、會看趨勢變化**,即可完成 80% 效能診斷。配合 pt-query-digest、pmm、grafana 可視化,讓數據庫狀態「可觀測、可預警、可回溯」。