Yog*_*oga 27 mysql mysql-5 mysql-5.6 query-cache
我们已经升级到 MySQL 5.6 并且开始看到 db server 的负载显着增加,最后发现 query_cache_type从 5.6 开始默认为 off start。
我们再次启用它并看到负载减少,为什么从 MySQL 5.6 开始默认禁用此值?我在启用它时看不到问题。
Rol*_*DBA 38
您需要了解 InnoDB 的历史才能了解原因。它是这样的:
InnoDB 和查询缓存一直处于战争状态。InnoDB 在检查 InnoDB 缓冲池中的更改,然后交叉检查查询缓存中的相同更改时,往往会非常严厉。
在 MySQL 5.0 之前,InnoDB 禁用了查询缓存。现在,InnoDB 与之交互。为了简化问题,您可以通过将query_cache_size设置为 0 来禁用查询缓存。
根据有关 query_cache_time的MySQL 文档
如果服务器在query_cache_type设置为 0 的情况下启动,则它根本不会获取查询缓存互斥锁,这意味着无法在运行时启用查询缓存,从而减少了查询执行的开销。
将query_cache_size设置为 0 并不是一刀切的解决方案。
首先,战争的原因是开销。InnoDB 将始终检查更改。更大的查询缓存将使 InnoDB 的工作更加困难。禁用查询缓存让 InnoDB 和查询缓存满意。但是,即使有这样的和平条约,您(开发人员/DBA)也可能因查询性能不佳而成为这场战争的牺牲品。
取决于以下
您应该将query_cache_size设置为您认为可以提高性能的任何数字(这相当于开始地下运动)。
如果你想知道我从哪里想出这个战争故事,请看我的旧帖子
Sep 05, 2012:频繁查询缓存失效的开销值得吗?请仔细阅读,因为我是从High Performance MySQL (2nd Edition) 的第 209-215 页学到的
我之前曾建议对其他人禁用查询缓存
Sep 25, 2013:使查询缓存条目(键)无效Sep 26, 2013:查询缓存命中值在我的数据库中没有改变Dec 23, 2013:高 CPU 和内存使用率的 MySQL注意:我意识到问题是关于query_cache_type 的。它确实对查询缓存有影响。禁用缓存会削弱 InnoDB 对其的支配地位。手动设置query_cache_type只是强制开发人员/DBA 仔细考虑查询缓存将遇到的查询类型。
| 归档时间: |
|
| 查看次数: |
38464 次 |
| 最近记录: |