您的位置:首页 > 数据库 > MySQL

mysql关闭缓存

2020-07-14 06:05 281 查看

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、尾声

实在没有办法了,我在阿里提了一个工单,阿里的工程师给我的解释倒很实在

就很直接,关不掉,那有没有什么办法可以解决需求呢,可以,每次查询完清除缓存。。。。很坑,大家有什么好的解决方案可以提给我。

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: