MySQL的query cache大部分情况下其实只是鸡肋而已,建议全面禁用。当然了,或许在你的场景下还是挺好的,还能发挥作用,那就继续使用吧,把本文当做参考就好。
不过,可能有的人人为只需要把 query_cache_size 大小调整为 0 就可以了,可以忽略 query_cache_type 参数的值,反正它也是可以在线调整的。
事实果真如此吗?让我们来实际模拟测试下就知道了。
以下几种场景:
1、初始化时,同时设置 query_cache_size 和 query_cache_type 的值为 0;
2、初始化时,设置 query_cache_size = 0,但设置 query_cache_type = 1;
3、初始化时,设置 query_cache_size = 0,query_cache_type = 1,但是启动后立刻 修改 query_cache_type = 0
4、初始化时,设置 query_cache_size = 0,query_cache_type = 0,但是启动后立刻 修改 query_cache_type = 1
5、初始化时,设置 query_cache_size = xMB,query_cache_type = 1,但是启动后立刻 修改 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,并没有真 正的关闭;
该贴被tngou编辑于2015-4-1 9:57:33