首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL Query Cache 運作原理深度解析與調校實戰

     編輯:MySQL 綜合教學

Query Cache (QC) 基本機制

  • 依 SQL 文本字面內容 作為 Key 快取 SELECT 結果。
  • 大小寫、空格、註解差異會導致不同快取條目(客戶端可能預處理,如命令列移除註解與首尾空白)。
  • 僅 SELECT 指令被快取;SHOW、USE 等不快取。

失效機制

任何相關表被修改(INSERT/UPDATE/DELETE/TRUNCATE/ALTER)即刻失效所有關聯查詢快取。 聯合查詢涉及多表,任一表更新即全失效。頻繁寫入的表不宜開啟 QC,否則快取失效開銷大於收益。

對策:預設開啟 QC,對頻繁更新表的查詢加 SQL_NO_CACHE 禁用快取。

不適合快取的查詢模式

  • 高度分散、低重複率查詢(如 SELECT pass FROM user WHERE name='xxx'),每次登入 SQL 文本不同,快取命中率近零,僅佔用記憶體。

記憶體管理:儲存塊

  • 結果集分塊儲存,塊大小由 query_cache_min_res_unit 控制(預設 4KB)。
  • 最後一塊未滿釋放剩餘空間;塊太小產生碎片,太大導致頻繁分配。
  • 每個快取條目佔用:SQL 文本塊 + 表資訊塊(共享)+ 結果塊數 × 2。
  • 觀察指標:Qcache_queries_in_cache / Qcache_total_blocks 比值接近 1:2 表示塊大小適中;偏大需增 query_cache_min_res_unit,偏小需減。

關鍵配置參數

監控與調校策略

  • Qcache_lowmem_prunes 快速增長 → 記憶體不足淘汰快取 → 增加 query_cache_size,目標使其零增長。
  • Qcache_hits / (Qcache_hits + Qcache_inserts) = 命中率,低於 20% 考慮關閉或縮小 QC。
  • 頻繁寫入系統建議設 query_cache_type=2(DEMAND),明確標註可快取查詢。

查看當前狀態

mysql> SHOW VARIABLES LIKE 'query_cache%';
mysql> SHOW STATUS LIKE 'Qcache%';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
參數說明
query_cache_limit單一查詢結果超過此值不快取(預設 1MB)。
query_cache_size分配給 QC 總記憶體,設 0 即禁用。需約 40KB 管理結構,設值勿低於此。
query_cache_min_res_unit單一儲存塊大小,預設 4KB,依碎片情況調整。
query_cache_type0=關閉,1=開啟(預設),2=DEMAND 模式(需 SQL_CACHE 才快取)。