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

依據 SHOW STATUS 進行 MySQL 效能診斷與優化實戰

     編輯:MySQL 資料庫相關知識

核心監控指標與優化判讀

慢查詢分析

SHOW VARIABLES LIKE '%slow%';
SHOW GLOBAL STATUS LIKE '%slow%';
  • Slow_queries > 0 需開啟慢查詢日誌分析
  • 主從架構建議**僅從庫開啟**慢查詢日誌,減少主庫開銷
  • 分析工具:mysqldumpslow -s c -t 20 slow.log (Top 20 高頻慢查詢)

連接數健康度

SHOW VARIABLES LIKE 'max_connections';
SHOW GLOBAL STATUS LIKE 'Max_used_connections';
  • 理想:Max_used_connections / max_connections ≈ 85%
  • < 10% → max_connections 設過大,浪費記憶體
  • 接近 100% → 擴大 max_connections 或增加從庫分流讀請求

MyISAM 索引快取 (key_buffer_size)

SHOW VARIABLES LIKE 'key_buffer_size';
SHOW GLOBAL STATUS LIKE 'Key_read%';
  • 未命中率 = Key_reads / Key_read_requests
  • < 0.1% (千分之一) 極佳;< 0.01% → 記憶體配過多可適度縮減
  • 區塊利用率:Key_blocks_used / (Key_blocks_used + Key_blocks_unused) ≈ 80%

臨時表狀況

SHOW GLOBAL STATUS LIKE 'Created_tmp%';
  • 磁碟臨時表比率 = Created_tmp_disk_tables / Created_tmp_tables
  • ≤ 25% 為合理;超過需調大 tmp_table_size、max_heap_table_size (受限於較小者)

表快取 (table_open_cache)

SHOW GLOBAL STATUS LIKE 'Open%tables%';
SHOW VARIABLES LIKE 'table_open_cache';
  • Open_tables / Opened_tables ≥ 85%
  • Open_tables / table_open_cache ≤ 95%
  • Opened_tables 快速增長 → 調大 table_open_cache

執行緒快取 (thread_cache_size)

SHOW GLOBAL STATUS LIKE 'Thread%';
SHOW VARIABLES LIKE 'thread_cache_size';
  • Threads_created 持續增長 → 調大 thread_cache_size (典型 32-128)
  • 緩存命中率 = 1 - Threads_created / Connections

查詢快取健康度

SHOW GLOBAL STATUS LIKE 'Qcache%';
SHOW VARIABLES LIKE 'query_cache%';
  • 命中率 = (Qcache_hits - Qcache_inserts) / Qcache_hits
  • 碎片率 = Qcache_free_blocks / Qcache_total_blocks > 20% → FLUSH QUERY CACHE
  • 利用率 = (query_cache_size - Qcache_free_memory) / query_cache_size 25-80%
  • Qcache_lowmem_prunes 持續增長 → 調大 size 或調整 min_res_unit

排序效能

SHOW GLOBAL STATUS LIKE 'Sort%';
  • Sort_merge_passes 大 → 增加 sort_buffer_size (但盲目調大不一定有效)

檔案描述符

SHOW GLOBAL STATUS LIKE 'Open_files';
SHOW VARIABLES LIKE 'open_files_limit';
  • Open_files / open_files_limit ≤ 75%

表鎖爭用

SHOW GLOBAL STATUS LIKE 'Table_locks%';
  • Table_locks_immediate / Table_locks_waited > 5000 → 考慮遷移 InnoDB (行級鎖)

全表掃描頻率

SHOW GLOBAL STATUS LIKE 'Handler_read%';
SHOW GLOBAL STATUS LIKE 'Com_select';
  • 掃描率 = Handler_read_rnd_next / Com_select
  • > 4000 → 索引缺失嚴重,檢查 EXPLAIN、補索引、調大 read_buffer_size (≤ 8MB)

診斷流程建議

  1. 建立基準線:穩定運行 24h+ 後收集完整 SHOW GLOBAL STATUS
  2. 重點檢視上述 10 大指標組,標記異常項
  3. 針對異常項調整**單一參數**,觀察 1-2h 效果
  4. 記錄調整前後對比,形成優化知識庫
  5. 定期 (週/月) 複盤,應對負載變化
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved