You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何MariaDB查询缓存无命中(Qcache_hits=0)?已执行大量重复查询

为什么MariaDB的Qcache_hits为0?

你的理解是对的

Qcache_hits确实代表查询缓存命中的次数,数值为0说明没有任何查询从缓存中获取结果。

当前问题的核心原因

从你给出的变量结果中,query_cache_type = OFF是关键:这个参数控制查询缓存的启用状态,当它设为OFF时,MariaDB会完全禁用查询缓存功能——不管你执行多少次相同的查询,都不会被存入缓存,自然不会有命中记录。

其他可能阻止查询缓存的因素(当query_cache_type启用时)

如果后续启用了查询缓存,但还是出现缓存未命中的情况,可能是以下原因:

  • 查询包含非确定性函数:比如NOW()、RAND()、CURDATE(),这类函数的结果会随时间/上下文变化,无法被缓存
  • 查询涉及系统表:比如mysql库下的用户、权限表等,这类表的查询不会被缓存
  • 使用了加锁查询语句:比如SELECT ... FOR UPDATE、SELECT ... IN SHARE MODE,这类语句针对的是实时数据,不会被缓存
  • 查询结果超过query_cache_limit:你的设置是1MB,如果查询结果大小超过这个值,不会被存入缓存
  • 表结构被修改:执行ALTER、DROP、TRUNCATE等操作后,该表相关的所有缓存会被清空
  • 事务中的查询:未提交的事务内的查询,可能无法被其他会话缓存或命中
  • 查询包含用户自定义变量:比如SELECT @my_var,这类查询依赖会话变量,不会被缓存
  • 临时表相关查询:临时表仅对当前会话可见,相关查询不会被存入公共缓存

注意事项

MariaDB从10.1.7版本开始弃用查询缓存,10.5.0版本开始完全移除了这个功能。如果你的MariaDB版本在10.5.0及以上,所有Qcache相关参数都是无效的,即使设置query_cache_type = ON也不会生效。

内容的提问来源于stack exchange,提问作者theking2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:46:06