赞
踩
一、概述
查询缓存(Query Cache,简称QC),存储SELECT语句及其产生的数据结果。
mysql的query cache用来缓存和query有关的数据。具体来说Query cache有其特殊的业务场景,它不像其他的数据库产品,缓存查询语句的执行计划等信息;而query cache则是缓存客户端提交给mysql的select语句以及语句的结果集,就是将select语句和语句的结果做hash映射关系后保存在一定的内存区域内。
二、工作原理
查询缓存的工作原理,基本上可以通过两句话概括:
例如:
select age from user 与 select AGE from user不会匹配,因为大小写不同;
select age from use 与 select age from user不会匹配,因为空格不同;
sql两边的空格可忽略,可以认为是对key进行过trim操作之后再进行equals比较。
三、配置
1、查看mysql设置参数
执行
show variables like '%query_cache%';
可以看到相关参数:
查看缓存使用情况
show status like '%Qcache%%';
可以看到相关参数:
Qcache_hits:缓存命中次数;
Qcache_inserts:缓存中插入次数,每缓存一次加1,注意这个不是缓存数量;
开启查询缓存
设置选项query_cache_type = 1 ,同时设置query_cache_size = 67108864;
注:query_cache_size的值设置在100MB以内即可。在MySQL里查询缓存是由一个全局锁在控制,每次更新查询缓存的内存块都需要进行锁定。
关闭查询缓存
设置选项query_cache_type = 0,同时设置query_cache_size = 0。
适用场景
用于频繁提交同一个语句,并且该表数据变化不是很频繁的场景,例如一些静态页面,或者页面中的某块不经常发生变化的信息。
由于查询缓存需要缓存最新数据结果,因此表数据发生任何变化(insert、update、delete或其他可能产生数据变化的操作),都会导致查询缓存被刷新。因而,对于一个更新频率非常低而只读查询频率非常高的场景下,打开查询缓存还是比较有优势的。
不适用场景:查询缓存对什么样的查询语句,无法缓存其结果集
查询缓存严格要求2次SQL请求要完全一样,包括SQL语句,连接的数据库、协议版本、字符集等因素都会影响。下面为查询缓存不适用的几个场景:
四、维护
五、性能监控
1、mysql提供一系列Global Status记录Query Cache当前状态,具体如下:
2、重要监控率的计算:
若整个平稳运行期监控率获得的信息为:命中率高于80%,内存使用率超过80%,并且Qcache_lowmem_prunes的值不停的增加,而且增加的数据还比较大,则说明我们为查询缓存缓冲区分配的内存过小,可以适当的增加查询缓冲区的大小;
若整个平稳运行期监控获得的信息为:命中率低于40%,Qcache_lowmem_prunes的值也保持一个平稳的状态,则说明我们的查询缓冲区的设置过大,或者说业务场景重复执行一样查询语句的概率低,同时若还检测到一定量的freeing items,那么必须考虑把查询缓存的内存调小,甚至关闭查询缓存功能。
六、查询缓存的更新策略
query cache一旦达到上限后,就会剔除老的query cache对象。同时,为了保证query cache中的内容与实际数据绝对一致,当表中的数据有任何变化,包括新增、修改、删除等,都会使所有应用到该表的SQL的query cache失效。
七、查询缓存的优缺点
八、查询缓存的使用业务
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。