獲取狀態變量
SHOW GLOBAL STATUS; -- 啟動以來累計
FLUSH STATUS; -- 長運行實例可重置計數器
核心指標分類解讀與調優動作
1. 連線與表緩存
| 變量 | 含義 | 調優判斷 |
Connections | 連線嘗試總數 | 基準參考 |
Max_used_connections | 峰值併發連線 | 調整 max_connections |
Open_tables | 當前打開表數 | 接近 table_cache 且 Opened_tables 持續增長 → 增大 table_cache(如 2048) |
Opened_tables | 歷史打開表數 | 同上 |
2. 執行緒池
| 變量 | 含義 | 調優判斷 |
Threads_created | 歷史建立執行緒數 | 增長快 → thread_cache_size 偏小,建議 8+;緩存命中率 = Threads_created/Connections |
Threads_cached | 緩存中閒置執行緒 | 參考 |
Threads_running | 活躍執行緒數 | 持續高 → 查詢慢或鎖衝突 |
3. 查詢緩存
| 變量 | 含義 | 調優動作 |
Qcache_free_blocks | 空閒記憶體塊數 | 過大 → 碎片,執行 FLUSH QUERY CACHE;flush 耗時長 → 緩存過大,調小 query_cache_size |
Qcache_free_memory | 剩餘緩存記憶體 | 不足 → 增大 query_cache_size(如 64M) |
Qcache_hits | 命中次數 | 越大越好 |
Qcache_inserts | 插入次數(未命中) | 命中率 = 1 - Qcache_hits/Qcache_inserts,80%+ 合格 |
Qcache_lowmem_prunes | 因記憶體不足淘汰次數 | 持續增長 → 碎片嚴重或記憶體太小 |
4. SQL 執行頻率與排序
Com_select/insert/update/delete:掌握讀寫比例
Slow_queries :快增 → 分析慢查詢日誌優化 SQL
Innodb_rows_read/inserted/updated/deleted:判斷負載類型
Sort_merge_passes :大 → sort_buffer_size 偏小(建議 5M)
5. 索引使用效率
| 變量 | 含義 | 異常判斷 |
Handler_read_key | 索引讀取次數 | 越高越好 |
Handler_read_rnd_next | 全表掃描次數 | 極大 → 索引利用率低;Handler_read_rnd_next/Com_select > 4000 → 增大 read_buffer_size(1M);超 8M → 必須優化 SQL |
6. InnoDB 行鎖衝突
| 變量 | 含義 | 警示閾值 |
Innodb_row_lock_time_avg | 平均鎖等待時間 | 大 → 鎖衝突嚴重 |
Innodb_row_lock_waits | 鎖等待總次數 | 大 → 鎖衝突嚴重 |
實戰建議
4 核 16G 實例:先觀察 Opened_tables、Threads_created、Qcache_lowmem_prunes、Handler_read_rnd_next、Innodb_row_lock_waits 五大核心指標,對應調整 table_cache、thread_cache_size、query_cache_size、read_buffer_size、索引設計與事務隔離級別。