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

淺談 MySQL Query Cache:原理、參數、失效機制與性能陷阱

     編輯:MySQL 資料庫相關知識

核心概念

Query Cache 緩存 「查詢語句 → 結果集」 的映射。默認開啟。

五大核心參數

參數說明默認值
query_cache_limit單條結果集最大緩存容量1MB
query_cache_min_res_unit每次分配最小記憶體塊-
query_cache_size總緩存記憶體,1024 倍數0(關閉)
query_cache_type開關:0=OFF, 1=ON, 2=DEMAND1
query_cache_wlock_invalidate寫鎖時是否失效相關緩存0

七大關鍵特性

  1. 整條 SQL 為單位緩存:含多表、子查詢、UNION,不拆分。
  2. 非塊存儲:僅緩存結果集相關信息。
  3. 極高效率:權限驗證後、SQL 解析前直接 Hash 查找,跳過優化器、存儲引擎、磁盤 I/O、CPU 運算。
  4. 大小寫敏感:Hash 基於字符,必須字符級完全一致才命中。
  5. 表級失效:表有任何增刪改,所有引用該表的緩存全失效。
  6. 可能降低性能:query_cache_type=1 時每個 SELECT 都查找緩存,寫入頻繁導致命中率低、碎片多、鎖競爭,反而拖慢整體。
  7. 健康度監控:SHOW GLOBAL STATUS LIKE 'Qcache%'
    • 命中率 = Qcache_hits / (Qcache_hits + Qcache_inserts),80%+ 合格
    • Qcache_lowmem_prunes 持續增長 → 碎片或記憶體不足
    • Qcache_free_blocks 過多 → 碎片,執行 FLUSH QUERY CACHE
    • 建議 query_cache_size ≤ 256MB

最佳實踐建議

  • 讀多寫少、數據變更頻率低的系統(報表、配置表)開啟
  • 高併發寫入系統建議關閉(query_cache_type=0)或用 DEMAND 模式配合 SQL_CACHE 顯式標記
  • 定期 FLUSH QUERY CACHE 整理碎片
  • 監控 Qcache_lowmem_prunes 與命中率,動態調整大小
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved