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

MySQL 查詢緩存實戰操作指南:啟控、監控、碎片整理與效能調優

     編輯:MySQL 資料庫相關知識

查詢緩存能將重複 SELECT 結果直接從記憶體返回,大幅降低 CPU 與 I/O。本文以實操指令示範緩存的啟停、參數檢視、碎片整理、清除與效能監控關鍵指標。

基礎開關與模式控制

-- 檢視當前模式
SELECT @@query_cache_type;  -- ON / OFF / DEMAND

-- 關閉緩存
SET GLOBAL query_cache_type = OFF;

-- 開啟緩存
SET GLOBAL query_cache_type = ON;

-- 單句控制:強制使用/不使用緩存
SELECT SQL_CACHE id, title FROM article;
SELECT SQL_NO_CACHE id, title FROM article;

核心參數檢視

-- 是否支援緩存
SHOW VARIABLES LIKE 'have_query_cache';  -- YES

-- 緩存總大小(Bytes)
SELECT @@global.query_cache_size;  -- 16777216 (16MB)

-- 單查詢最大緩存限制
SELECT @@global.query_cache_limit;  -- 1048576 (1MB)

維護操作

-- 碎片整理(不清除資料,僅合併記憶體塊)
FLUSH QUERY CACHE;

-- 完全清除緩存
RESET QUERY CACHE;

效能監控關鍵指標

FLUSH TABLES;  -- 確保狀態最新
SHOW STATUS LIKE 'Qcache%';
變數含義健康判讀
Qcache_free_blocks空閒記憶體塊數過大表示碎片嚴重
Qcache_free_memory剩餘可用記憶體過低需擴充 query_cache_size
Qcache_hits命中次數核心效能指標
Qcache_inserts寫入緩存次數配合 hits 計算命中率
Qcache_lowmem_prunes因記憶體不足被淘汰次數>0 持續增長需加大緩存
Qcache_not_cached未緩存查詢數含非 SELECT、使用 NOW() 等
Qcache_queries_in_cache當前緩存查詢數觀察緩存利用度
Qcache_total_blocks總記憶體塊數配合 free_blocks 算碎片率

關鍵公式與調優建議

  • 碎片率 = Qcache_free_blocks / Qcache_total_blocks × 100% > 20% → FLUSH QUERY CACHE 或降低 query_cache_min_res_unit
  • 利用率 = (query_cache_size - Qcache_free_memory) / query_cache_size × 100% < 25% → 緩存過大可縮減;> 80% 且 prunes > 50 → 過小或碎片多
  • 命中率 = Qcache_hits / (Qcache_hits + Qcache_inserts) × 100%(或 1 - inserts/hits)
  • 建議 min_res_unit = (query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache (參考 High Performance MySQL)

實戰觀察範例

-- 觀察緩存新增
SELECT SQL_CACHE id, title FROM article;
SHOW STATUS LIKE 'Qcache_queries_in_cache';  -- 0 → 1

-- 觀察記憶體消耗
SHOW STATUS LIKE 'Qcache_free_memory';  -- 16768408 → 16766728

查詢緩存對「讀多寫少、重複查詢多」場景效果顯著;寫入頻繁會導致頻繁失效,需權衡啟用。

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