003MySQL性能调优005查询缓存

1 作用

查询缓存,主要功能是将请求的返回结果集缓存到内存中,与查询语句的一个哈希值做一个对应。

如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,键缓存,权限缓存等。

2 配置

在配置文件中开启查询缓存:

query_cache_type = [0|1|2]
query_cache_size = 1048576
query_cache_limit = 1048576
query_cache_min_res_unit = 4096
query_cache_wlock_invalidate = [0|1]

说明:

query_cache_type:设置是否打开查询缓存:
0:不开启查询缓存,等同于OFF。
1:开启查询缓存,等同于ON,缓存所有语句,需要在SQL语句中的SELECT关键字后面增加sql_no_cache放弃缓存。
2:开启查询缓存,等同于DEMAND,不缓存语句,需要在SQL语句中的SELECT关键字后面增加sql_cache主动缓存,常用。
query_cache_size:设置缓存使用的内存,默认为0,表示为查询缓存预留的内存为0,无法使用查询缓存。
query_cache_limit:缓存的最大查询结果。如果查询结果大于这个值,则不会被缓存。
因为查询缓存在数据生成的时候就开始尝试缓存数据,所以只有当结果全部返回后,MySQL才知道查询结果是否超出限制。
如果超出,MySQL则增加状态值Qcache_not_cached,并将结果从查询缓存中删除。如果你实现知道有很多这样的情况发生,那么建议在查询语句中加入sql_no_cache来避免查询缓存带来的额外消耗。
query_cache_min_res_unit:在查询缓存中分配内存块时的最小单位。
query_cache_wlock_invalidate:如果某个数据表被其他的链接锁住,是否仍然从查询缓存中返回结果。
这个参数默认是OFF,这可能在一定程序上会改变服务器的行为,因为这使得数据库可能返回其他线程锁住的数据。将参数设置成ON,则不会从缓存中读取这类数据,但是这可能会增加锁等待。
对于绝大多数应用来说无需注意这个细节,默认的通常没有问题。

3 使用

3.1 生效条件

查询缓存可以看做是SQL文本和查询结果的映射。

如果第二次查询的SQL和第一次查询的SQL完全相同(注意必须是完全相同,即使多一个空格或者大小写不同都认为不同)且开启了查询缓存,那么第二次查询就直接从查询缓存中取结果。

即使完全相同的SQL,如果使用不同的字符集、不同的协议等也会被认为是不同的查询而分别进行缓存。

可以通过下面的SQL来查看缓存命中次数(是个累加值):

show status like 'Qcache_hits';

3.2 失效条件

在表的结构或数据发生改变时,查询缓存中的数据不再有效。

所以查询缓存适合有大量相同查询的应用,不适合有大量数据更新的应用。

4 清理缓存

清理查询缓存内存碎片:

flush query cache;

从查询缓存中移出所有查询:

reset query cache;

关闭所有打开的表,同时该操作将会清空查询缓存中的内容:

flush tables;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值