MySQL/MariaDB中query_cache_size与query_cache_limit的区别是什么?
MySQL/MariaDB中query_cache_size与query_cache_limit的核心差异
嘿,刚好对这俩参数熟得很,给你掰扯清楚它们的核心差异:
1. query_cache_size:查询缓存的总内存“池子”
- 本质是整个查询缓存区的总内存上限,MySQL会专门划出这么一块内存来存储符合缓存条件的查询结果。比如你设置
query_cache_size=64M,就意味着给查询缓存分配了64MB的专属内存。 - 关键细节:如果把这个值设为0,就直接关闭了查询缓存功能;值太小的话,缓存的结果很快会被新结果挤出去,起不到缓存加速的作用;但也不能设得过大,不然会占用过多系统内存,甚至引发缓存碎片问题,拖慢数据库性能。
2. query_cache_limit:单个查询结果的缓存“准入门槛”
- 这是单个查询结果能被缓存的最大大小阈值。举个例子,如果你设置
query_cache_limit=2M,那任何查询结果超过2MB的请求,哪怕当前缓存池还有剩余空间,MySQL也不会把它放进缓存里。 - 设计目的:用来过滤掉大结果集的查询——这类查询要么占缓存空间太大,要么很少被重复执行,缓存它们性价比极低,反而会浪费宝贵的缓存资源。
关键差异总结
- 作用范围:
query_cache_size是全局总容量控制,管的是整个缓存池的大小;query_cache_limit是单条结果的准入控制,针对每个独立查询。 - 控制逻辑:
query_cache_size决定“缓存总共能存多少东西”,query_cache_limit决定“单个东西能不能被存进来”。 - 配置影响:调大
query_cache_size能容纳更多小结果的缓存(只要总容量允许);调大query_cache_limit可能会让大结果集进入缓存,导致缓存池被快速占满,反而影响其他高频小查询的缓存效率。
内容的提问来源于stack exchange,提问作者Elijah Lynn
相关产品推荐
相关产品推荐

