MariaDB 繼承了 MySQL 的查詢緩存機制,通過緩存 SELECT 結果集提升重複查詢性能。本文匯總核心配置參數、狀態監控指標及清理命令,便於 DBA 快速調優。
| 參數 | 默認值 | 說明 |
|---|---|---|
| have_query_cache | YES | 只讀,顯示編譯是否支持查詢緩存 |
| query_cache_type | ON | 緩存開關:OFF(0)/ON(1)/DEMAND(2)。DEMAND 需 SQL 加 SQL_CACHE 提示 |
| query_cache_size | 0 | 緩存總內存(字節),0 表示禁用。建議 64M~256M,過大導致鎖競爭 |
| query_cache_limit | 1048576 (1M) | 單個查詢結果最大緩存大小,超過不緩存 |
| query_cache_min_res_unit | 4096 (4K) | 緩存塊最小分配單位,碎片化嚴重時可適當增大 |
| query_cache_wlock_invalidate | OFF | 寫鎖時是否失效緩存,ON 可減少髒讀但增大鎖爭用 |

MariaDB [(none)]> SHOW STATUS LIKE 'Qcache%'; +-------------------------+--------+ | Variable_name | Value | +-------------------------+--------+ | Qcache_free_blocks | 0 | -- 空閒內存塊數 | Qcache_free_memory | 0 | -- 空閒內存字節 | Qcache_hits | 0 | -- 命中次數 | Qcache_inserts | 0 | -- 插入次數 | Qcache_lowmem_prunes | 0 | -- 內存不足被剔除次數 | Qcache_not_cached | 0 | -- 未緩存查詢數(非 SELECT、超限等) | Qcache_queries_in_cache | 0 | -- 當前緩存查詢數 | Qcache_total_blocks | 0 | -- 總塊數 +-------------------------+--------+

Qcache_hits / (Qcache_hits + Qcache_inserts),建議 > 80%。Qcache_free_blocks / Qcache_total_blocks,> 20% 考慮調大 query_cache_min_res_unit 或執行 FLUSH QUERY CACHE 整理。Qcache_lowmem_prunes / Qcache_inserts,頻繁剔除說明 query_cache_size 不足。-- 整理碎片,不刪除現有緩存 FLUSH QUERY CACHE; -- 完全清空緩存 RESET QUERY CACHE;
query_cache_size=128M、query_cache_type=ON。query_cache_type=0、query_cache_size=0,避免全局鎖成為瓶頸。Qcache_* 指標,配合 Grafana 告警。