mysql关闭缓存

1、背景

最近我们做了一个每天把线上的慢sql发送邮件的机制,随后而来的是每天早上来的第一件事情就是优化慢sql,优化当然是有比较才叫优化啦。然后我就很开心的开始了我的优化之旅,每优化完一个慢sql后直接在Navicat里面跑,哦豁,变快了,我再次把老得慢sql拿来跑,尴尬的发现原来的sql也变得很快,第一次很慢,随后的查询都变得很快,立马联想到的当然是缓存啦,那该如何关闭掉mysql的缓存呢,这就是我们今天要说的话题。

2、过程

首先当然是找度娘看了下,大家基本的方法是:

  1. 连接服务器,进入到mysql(我的版本5.7.30);
  2. show variables like ‘%cache%’,查看是否开启了缓存,我们可以看到query_cache_type = on,query_cache_size > 0,代表着mysql开启了mysql缓存;
    在这里插入图片描述
  3. 根据大家的说法,有两种方式可以关掉mysql缓存机制:
    第一种为临时方案:
    set global query_cache_size=0
    set global query_cache_type=0

    这种方式修改为临时起作用,mysql重启后讲不再作用于mysql;
    第二种为永久修改:
    进入到mysql的配置文件中,如果有这两个配置,修改为:
    query_cache_type=0
    query_cache_size=0

    在这里插入图片描述
    即可,没有的话在末尾添加即可,保存再重启,发现:
    在这里插入图片描述
    两个都被我关掉了,你们以为到这里就结束了嘛,我也是这么觉得的,然后很快乐的继续我的优化之旅,但是,关掉连接,重新连接后跟没关之前是一样的,心态崩了。

3、解决

冷静了一下,我很暴力的第一次使用sql_no_cache,直接结果不缓存,但是并没有什么用,随后我联想到的是我的工具的问题,毕竟Navicat这种毕竟是面向用户的产品,优化是必然的。那就打开阿里直连数据库,发现仍是一样的结果,索性我就放弃了工具,ssh到服务器,直接进入到mysql里面跑我的sql,坑爹的是结果是一样的!!!!

没办法,我只好求助于google,发现了一篇
在这里插入图片描述
那他怎么解决的呢,设置buffer_pool的值,就是这玩意儿
在这里插入图片描述
既然如此,很开心的将buffer_pool设置成了1KB,保存重启一气呵成,但是启动的时候:
在这里插入图片描述
查看show variables like ‘%buffer_pool%’
在这里插入图片描述
发现大小并没有发生改变,那这个参数是干嘛的呢
在这里插入图片描述
innodb_buffer_pool_size是用于缓存表,索引和其他一些东西的内存量,按解释的话将它调到足够小就可以让查询不走缓存,但是根据官网解释
在这里插入图片描述
这个值得默认大小为128M,最小值为5M,是不是很surprise,所以调这个值根本么得意义。

4、尾声

实在没有办法了,我在阿里提了一个工单,阿里的工程师给我的解释倒很实在
在这里插入图片描述
就很直接,关不掉,那有没有什么办法可以解决需求呢,可以,每次查询完清除缓存。。。。很坑,大家有什么好的解决方案可以提给我。

越知道你就越不知道,技术有限,理解有限,欢迎指正~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值