INSERT/UPDATE/DELETE/TRUNCATE/ALTER/DROP)結論:僅適合「讀多寫極少」的表(如配置表、字典表、靜態報表)。
| 參數 | 默認值 | 建議值 | 說明 |
|---|---|---|---|
query_cache_type | ON (1) | DEMAND (2) | 0=關閉,1=全開,2=按需(需 SQL_CACHE) |
query_cache_size | 0 (關閉) | 64M-256M | 總內存上限,需 > 40KB 才啟用 |
query_cache_limit | 1M | 1M-4M | 單次結果集超過此值不緩存 |
query_cache_min_res_unit | 4KB | 1KB-2KB | 內存分配最小單元,小結果集調小減少碎片 |
query_cache_wlock_invalidate | OFF | OFF | 寫鎖時是否返回舊緩存 |
[mysqld]
query_cache_type = 2
query_cache_size = 128M
query_cache_limit = 2M
query_cache_min_res_unit = 2K
-- 明確啟用
SELECT SQL_CACHE id, name FROM config WHERE type='pay';
-- 明確禁用
SELECT SQL_NO_CACHE * FROM orders WHERE user_id=123;
策略:全局 DEMAND + 代碼層 SQL_CACHE,精準控制,避免污染。
SHOW STATUS LIKE 'Qcache%';
| 指標 | 含義 | 健康閾值 |
|---|---|---|
Qcache_hits | 命中次數 | 持續增長 |
Qcache_inserts | 寫入次數 | - |
Qcache_hits / (Qcache_hits + Qcache_inserts) | 命中率 | > 80% |
Qcache_lowmem_prunes | 內存不足淘汰次數 | 應為 0 或極低 |
Qcache_free_blocks / Qcache_total_blocks | 碎片率 | < 20% |
(query_cache_size - Qcache_free_memory) / query_cache_size | 內存利用率 | 60%-80% |
FLUSH QUERY CACHE:整理碎片,不清除數據RESET QUERY CACHE:清空所有緩存FLUSH TABLES:同步效果等同 RESETinnodb_buffer_pool_dump_at_shutdown)Qcache_hits 確認業務依賴程度sql:hash(sql_text)query_cache_type=0、query_cache_size=0 釋放內存給 Buffer Pool