mysql query cache 关闭_为什么要关闭Query Cache

原因如下:

1.QC命中率低,因为需要请求sql和请求时的环境(连接的数据库、协议版本、字符集等)与缓存中的一模一样才会命中缓存

2.由于QC需要缓存最新的数据,所以在数据发生变化时(比如增删改操作)QC就会刷新,这导致缓存会频繁的写入、擦除,消耗过多资源

此外,QC也不适用于下面几个场景:

读取mysql的系统表

子查询或者外层查询

查询语句中用到随机函数,或者now这种函数,给查询结果带来不确定性(每次查询结果会有差异),

查询中用到了视图,临时表

存储过程,触发器中调用的sql也不适合

查询语句加了SQL_NO_CACHE

查询语句未引用任何表

类似select into这种sql,显示加锁的sql都不会去缓存

更奇葩的是查询语句命中缓存之后,会接着验证用户的访问权限,如果无权也会使用QC

最为重要的是,在MySQL里QC是由一个全局锁在控制,每次更新QC的内存块都需要进行锁定。

例如,一次查询结果是20KB,当前 query_cache_min_res_unit 值设置为 4KB(默认值就是4KB,可调整),那么么本次查询结果共需要分为5次写入QC,每次都要锁定,可见其成本有多高。

所以QC适合表数据量少,更新频率低,查询比较多,比如配置表、权限表。

关闭方法很简单,有两种:

1、同时设置选项 query_cache_type = 0 和 query_cache_size = 0;

2、如果用源码编译MySQL的话,编译时增加参数 --without-query-cache 即可;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值