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

MySQL 查詢緩存參數完整解析:配置變數、狀態指標、碎片率/利用率/命中率計算與調優實戰

     編輯:MySQL 資料庫相關知識

查詢緩存 (Query Cache) 在讀多寫少場景極具效能杠桿。本文完整解析 6 大配置變數、9 大狀態指標、3 核心健康度公式與調優實戰案例,助力精準調優。

一、配置變數 (SHOW VARIABLES LIKE 'query_cache%')

變數預設說明調優建議
have_query_cacheYES編譯支援標記不可修改
query_cache_typeON模式:OFF/ON/DEMANDDEMAND 配合 SQL_CACHE 精準控制
query_cache_size0 (關閉)總記憶體 (Bytes),0=禁用依命中率與利用率動態調整
query_cache_limit1MB單查詢結果最大緩存體積大結果集場景適度調大
query_cache_min_res_unit4KB記憶體分配最小單元小查詢多→調小 (2KB);大查詢多→調大
query_cache_wlock_invalidateOFFMyISAM 寫鎖時是否失效緩存寫入頻繁可開啟減少髒讀

二、狀態指標 (SHOW STATUS LIKE 'Qcache%')

指標含義健康判讀
Qcache_free_blocks空閒記憶體塊數過大 = 碎片嚴重
Qcache_free_memory剩餘可用記憶體過低 = 需擴充 size
Qcache_hits命中次數核心效能指標
Qcache_inserts寫入緩存次數分母
Qcache_lowmem_prunes因記憶體不足被淘汰次數持續增長 = 記憶體不足或碎片多
Qcache_not_cached未緩存查詢數非 SELECT、含 NOW()、超過 limit 等
Qcache_queries_in_cache當前緩存查詢數利用度參考
Qcache_total_blocks總記憶體塊數分母

三、三大健康度公式

  1. 碎片率 = Qcache_free_blocks / Qcache_total_blocks × 100%
    • > 20% → FLUSH QUERY CACHE 或降低 query_cache_min_res_unit
  2. 利用率 = (query_cache_size - Qcache_free_memory) / query_cache_size × 100%
    • < 25% → 緩存過大可縮減
    • > 80% 且 prunes > 50 → 過小或碎片多
  3. 命中率 = Qcache_hits / (Qcache_hits + Qcache_inserts) × 100%
    • 或 1 - Qcache_inserts / Qcache_hits (視定義)
    • < 50% 通常表示寫入頻繁/查詢多樣化,緩存效果有限

四、query_cache_min_res_unit 黃金公式

參考《High Performance MySQL》:

query_cache_min_res_unit = (query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache

動態計算平均每查詢佔用記憶體,作為分配單元基準。

五、實戰觀察案例

-- 初始狀態
Qcache_free_blocks=4984, Qcache_total_blocks=46362 → 碎片率 10.7%
Qcache_free_memory=30097400, query_cache_size=67108864 → 利用率 55.2%
Qcache_hits=701669, Qcache_inserts=832414 → 命中率 45.8%

-- 調整 min_res_unit 4096→2048
碎片率 10.7% → 3.2% (顯著改善)
但過小增加 IO 開銷,需平衡

六、維護指令

FLUSH QUERY CACHE;  -- 整理碎片,不清除資料
RESET QUERY CACHE;  -- 完全清空緩存

七、適用性邊界

  • ✅ 讀多寫少、重複查詢高、結果集小 (配置表、字典表、靜態報表)
  • ❌ 寫入頻繁 (每寫入即失效相關緩存)、大結果集、非確定性函數 (NOW、RAND、UUID)
  • MySQL 8.0 已移除 Query Cache,遷移建議改用 Redis/Memcached 外部快取層

查詢緩存是雙刃劍:精準配置可獲 10 倍提升,誤用反拖累效能。持續監控三大指標,動態平衡。

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