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

MySQL 狀態變量實戰性能調優:從連線、執行緒、查詢緩存到鎖衝突

     編輯:MySQL 資料庫相關知識

獲取狀態變量

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、索引設計與事務隔離級別。

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