
优化场景 | 说明 | 价值 |
查询缓存分区优化 | 对 Query Cache/Meta Hash 进行分区处理,将不同类型或范围的查询精准映射至特定分区,降低 Hash 冲突概率,加速查询缓存的定位与检索流程。 | 提升查询缓存的 Hash 性能与命中率,在高并发查询场景中显著减少 CPU 资源消耗,更高效地响应大量查询请求。 |
只读节点开表优化 | 针对只读节点查询缓存有效性验证环节中的开表操作进行深度优化,减少因表操作引发的不必要的缓存失效情形,确保查询缓存在更多场景中维持有效状态。 | 提升缓存的实际利用率与系统整体查询性能。 |
基于命中率的智能缓存控制 | 当查询缓存命中率处于较低水平时,自动启动智能缓存控制机制,限制并发查询数量,合理设置采样频率,让绝大多数查询绕过查询缓存,仅用专用线程负责采样与命中率估算工作,命中率回升后重新启用查询缓存功能。 | 避免在低命中率状况下大量查询涌入缓存系统导致的资源浪费与性能下滑问题,减少无效查询缓存占用的空间资源,维持系统在不同命中率场景下的稳定高效运行。 |
缓存换入换出开销优化 | 优化缓存替换算法与内存管理策略,降低缓存换入换出操作的频率与资源消耗,依据科学合理策略进行缓存替换,优先保留高频次及重要的查询缓存结果。 | 减少因频繁换入换出导致的系统性能波动,让查询缓存在有限内存资源下发挥最大效能,提供持续稳定的查询加速支持。 |
LRU 缓存策略优化 | 依据查询的大小与 Hit 数对 Query Cache LRU 缓存策略进行精细化调整,优先存储高频次及标量查询结果,避免缓存低效查询造成的空间浪费。 | 提升缓存空间的利用效率与系统在特定负载下的查询响应性能,确保缓存资源分配至最具价值的查询任务上。 |
动态缓存开关控制 | 在系统面临写负载压力时及时动态关闭查询缓存,读写负载停止后秒级恢复启用状态。 | 防止因频繁更新数据导致的查询缓存失效及性能退化问题,提高查询缓存的适应性与灵活性,使系统在复杂读写负载环境中维持良好性能表现。 |
动态缓存容量调整 | 支持动态 resize query cache size,且调整过程不阻塞当前正在进行的读写请求,根据实时负载需求与资源状况灵活调整缓存大小。 | 解决固定缓存大小设置不合理的性能瓶颈问题,避免因缓存容量调整引发的性能急剧下降或中断现象,为系统持续稳定高效提供查询加速服务。 |
参数名 | 是否重启 | 是否全局 | 默认值 | 取值范围 | 支持配置的节点 | 说明 |
query_cache_limit | no | 否 | 1048576 | 0 - ulong_max* | 读写实例 只读实例 | 超过该值的 Query 结果集不会被缓存,单位:Bytes。 |
query_cache_size | no | 否 | 1048576 | 1048576 - ulong_max* | 读写实例 只读实例 | 系统中可以用于 Query Cache 内存的大小(实际使用时才会占用内存空间),单位:Bytes,取值必须为1024的倍数。 说明: Sysbench Poc 场景建议设置表大小的20%以上作为 query_cache_size。正常场景建议为 Buffer Pool 的5%左右,如果业务没有只读表或者热点不明显,建议降低 query_cache_size大小。 |
query_cache_type | 详见说明列 | 否 | OFF | OFF/ON/DEMAND | 读写实例 只读实例 | 取值 OFF:表示功能关闭。 取值 ON:表示缓存所有结果,除非 SELECT 语句使用 sql_no_cache 禁用查询缓存。 取值 DEMAND:表示只缓存 SELECT 语句中通过 sql_cache 指定需要缓存的查询。 注意: 如果查询缓存最初是关闭的(配置文件中 query_cache_type=0),则无法再动态开启,需要配置 my.cnf 重启才能开启查询缓存。但是关闭查询缓存始终都可以动态执行。 |
query_cache_wlock_invalidate | no | 否 | OFF | ON/OFF | 读写实例 只读实例 | 当写锁发生在表上时,是否先失效该表相关的查询缓存。 ON:是 OFF:否 |
SHOW STATUS LIKE 'Qcache%';
Status | 描述 |
Qcache_hits | 查询缓存命中次数。 |
Qcache_hit_rate | 近期查询命中率,值为最近10000次查询缓存(Qcache_search_times 每增加10000)中,命中查询缓存的比例。 |
Qcache_search_times | Query 查询 Cache 的次数(被限流以及不满足走 Query Cache 的查询不会计数)。 |
Qcache_total_times | Query 走 Query Cache 的总次数(限流等情况也会被记录)。 |
Qcache_free_memory | Query Cache 剩余空间。 |
Qcache_inserts | 成功缓存结果集的次数。 |
Qcache_not_cached | 未能缓存结果集的次数。 |
Qcache_queries_in_cache | 在 Query Cache 中缓存的 Query 数量。 |
Qcache_lowmem_prunes | 被 LRU 驱逐的 Query Cache 数量。 |
测试目标 | 测试场景 | 测试步骤及结果 |
查询缓存对读场景性能的提升。 | 不同数据量下,Query Cache 带来的性能提升。 | |
查询缓存大小(query_cache_size)对性能的影响。 | 不同 query_cache_size 及数据量下,Query Cache 带来的性能提升。 |








文档反馈