mysql query cache的坑

mysql query cache

今天发现一个坑,数据库负载突然升高,并出现大量的waiting for query cache lock,进程锁死。线上配置为query_cache_size =50M,query_cache_type 的值为 2。通过查找官方文档发现type=2的意思是:只缓存以SELECT SQL_NO_CACHE开头的查询结果。先临时关闭,等到晚上再重启数据库永久生效。

临时关闭: set global query_cache_type=OFF,set global query_cache_size=0

永久关闭:query_cache_size = 0,query_cache_type = 0

query cache机制

当数据库打开了Query Cache功能后,数据库在执行SELECT语句时,会将其结果放到QC中,当下一次处理同样的SELECT请求时,数据库就会从QC取得结果,而不需要去数据表中查询。

但是!如果数据表被更改,那么和这个数据表相关的全部Cache全部都会无效,并删除之。这里“数据表更改”包括: INSERT, UPDATE, DELETE, TRUNCATE, ALTER TABLE, DROP TABLE, or DROP DATABASE等。

如果你的数据表更新频繁的话,那么Query Cache将会成为系统的负担。在5.6.8版本后query_cache_type默认为关闭状态。为了保险起见,我们设置双0。

配置注意事项

1、想要彻底关闭query cache,务必在一开始就设置 query_cache_type = 0,即便是启动后将 query_cache_type 从 1 改成 0,也不行;

2、即便query_cache_size = 0,但 query_cache_type 非 0 的话,在实际环境中,可能会频繁发生 Waiting for query cache lock;

3、一开始就设置 query_cache_type = 0 的话,没有办法在运行 过程中再次动态启用,反过来则可以。也就是说,一开始是启用 query cache 的, 在运行过程中将其关闭,但事实上仍然会发生 Waiting for query cache lock,并没有真正的关闭;

posted on 2017-12-28 17:56 JeffSunpan27 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/jeffsunpan27/p/8137037.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值