SHOW STATUS 提供 300+ 運行時計數器,是 MySQL 運行健康度的「儀表盤」。本文講解會話/全局兩種統計範圍、高頻監控指標分類、典型異常模式識別、參數調優映射表,讓你用數據說話,精準調優。
統計範圍:SESSION vs GLOBAL
-- 默認 SESSION:僅當前連接
SHOW STATUS LIKE 'Com_select';
-- GLOBAL:實例啟動以來所有連接累計
SHOW GLOBAL STATUS LIKE 'Com_select';
⚠️ 生產調優 必須用 GLOBAL,SESSION 僅適合當前會話調試。
核心監控指標分類速查
1. 連接與線程
| 變量 | 含義 | 異常信號 | 對應參數 |
| Threads_connected | 當前打開連接數 | 接近 max_connections | max_connections |
| Threads_running | 非 Sleep 活躍線程 | 持續高位 = 高併發/慢查詢 | thread_pool (Percona) |
| Threads_created | 歷史創建線程數 | 增長快 = 線程池/緩存不足 | thread_cache_size |
| Threads_cached | 緩存中空閒線程 | 為 0 且 Created 增長快 | thread_cache_size |
| Connections | 嘗試連接總數(含失敗) | Aborted_connects 高 = 網絡/認證問題 | back_log |
| Aborted_connects | 連接失敗數 | > 0 需排查 | - |
2. 查詢執行統計
| 變量 | 含義 | 衍生指標 |
| Com_select | SELECT 執行次數 | QPS 基線 |
| Com_insert / Com_update / Com_delete | 寫操作次數 | 寫入比例 = (Ins+Upd+Del)/Questions |
| Questions | 發送給 Server 的語句總數 | 總 QPS |
| Slow_queries | 慢查詢計數 | > 0 需分析慢日志 |
3. 表鎖與 IO
| 變量 | 含義 | 異常信號 |
| Table_locks_immediate | 立即獲取鎖次數 | - |
| Table_locks_waited | 等待鎖次數 | > 0 且高 = 鎖爭用,優化查詢/拆表/讀寫分離 |
| Innodb_row_lock_waits | InnoDB 行鎖等待次數 | 高 = 熱點行爭用 |
| Innodb_row_lock_time_avg | 平均行鎖等待毫秒 | > 50ms 需關注 |
4. 緩存命中率(關鍵健康度)
-- Key Buffer (MyISAM)
Key_read_requests / Key_reads -- 命中率 = 1 - Reads/Requests,目標 > 99%
-- InnoDB Buffer Pool
Innodb_buffer_pool_read_requests / Innodb_buffer_pool_reads -- 目標 > 99.9%
-- Table Open Cache
Open_tables / Opened_tables -- Opened 增長快 = table_open_cache 過小
5. 臨時表與排序
Created_tmp_tables / Created_tmp_disk_tables:磁盤臨時表比例 > 10% 需調大 tmp_table_size/max_heap_table_size
Sort_scan / Sort_range:全表排序 vs 索引範圍排序
典型異常模式 → 調優動作映射
| 現象 | 可能原因 | 調優動作 |
| Threads_created 快速增長 | thread_cache_size 過小 | 調大至 50-200(視併發) |
| Table_locks_waited 高 | MyISAM 表鎖爭用 / 長事務 | 遷移 InnoDB、拆大表、優化慢查詢 |
| Created_tmp_disk_tables 高 | 臨時表超內存落盤 | 調大 tmp_table_size、優化 GROUP BY/ORDER BY |
| Key_reads / Key_read_requests > 1% | key_buffer_size 不足 | 調大 key_buffer_size(MyISAM) |
| Innodb_buffer_pool_reads 高 | Buffer Pool 過小 | 調大 innodb_buffer_pool_size(建議 70-80% 內存) |
| Handler_read_rnd 高 | 大量全表掃描 / 錯誤 JOIN | 加索引、改寫 JOIN 順序 |
| Slow_queries 增長 | 慢查詢增多 | 分析慢日志、優化 Top SQL |
自動化監控建議
- Prometheus +
mysqld_exporter 採集 GLOBAL STATUS
- Grafana 構建儀表板:QPS、併發、緩存命中率、鎖等待、臨時表比率
- 告警規則:
Threads_connected / max_connections > 0.8、Slow_queries 5min 增長 > 10
定期 FLUSH STATUS 歸零計數器(僅影響 SESSION,GLOBAL 不受影響),配合部署變更時間點,量化優化效果。