使用MySQL查询缓存

简介

    MySQL的查询缓存是MySQL内置的一种缓存机制,可以针对sql进行缓存。比如我们发送select * from mysql.user这么一个查询,MySQL首先检索内存中是否有数据并且数据是否过期,如果没有数据或者数据已经过期就去数据库中查找,如果有数据并且没有过期就直接返回数据。对于sql的匹配规则非常简单,就是字符串的比较,只要字符串相同,那么就认为是同一个查询。这里的字符串相同并不是表示sql语义相同,而是查询的sql字符串相同,空格也不行。

查询缓存配置

查询缓存的开启在my.cnf配置文件中,修改查询缓存相关参数就可以完成。(RDS在管理后台进行配置)

参数解释

query_caceh_type

是否开启查询缓存

0 表示不开启查询缓存
1 表示始终开启查询缓存(不要缓存使用sql_no_cache) 
2 表示按需开启查询缓存 (需要缓存使用 sql_cache)。

query_cache_size 给缓存分配的最大内存空间 
query_cache_limit 指定单个查询能够使用的缓存大小
query_cache_wlock_invalidate

针对myisam存储引擎(所以采用非myisam引擎的就不需要考虑了),设置当有write lock在某个table上面的时候,读请求是要等待write lock释放资源之后再查询还是允许直接从query cache中读取结果,默认是OFF,可以直接从query cache中取得结果。

查看缓存状态

我们可以使用 show global status like 'Qcache%'; 来查看查询缓存的使用状态。

参数解释

Qcache_free_blocks 目前还处于空闲状态的 Query Cache 中内存 Block 数目
Qcache_free_memory 目前还处于空闲状态的 Query Cache 内存总量
Qcache_hits 命中次数
Qcache_inserts 向 Query Cache 中插入新的 Query Cache 的次数,也就是没有命中的次数
Qcache_lowmem_prunes 当 Query Cache 内存容量不够,需要从中删除老的 Query Cache 以给新的 Cache 对象使用的次数
Qcache_not_cached 没有被 Cache 的 SQL 数,包括无法被 Cache 的 SQL 以及由于 query_cache_type 设置的不会被 Cache 的 SQL
Qcache_queries_in_cache  目前在 Query Cache 中的 SQL 数量
Qcache_total_blocks  Query Cache 中总的 Block 数量

单句SQL缓存

配置文件的query_caceh_type参数有三个选项。

其中0 表示不开启查询缓存,也就是说任何SQL都无法使用查询缓存。

1 表示始终开启查询缓存,也就是说所有的SQL都会被缓存。当我们认为某一项业务的SQL会频繁变化(例如利用用户坐标排序),那么我们可以使用sql_no_cache指定此SQL不进入缓存,从而减少性能开销。例如:select sql_no_cache * from user;

2 表示按需开启查询缓存,也就是说所有的SQL在不指定情况下都不会被缓存。只有使用sql_cache的SQL才会被缓存。例如:select sql_cache * from user;

猜你喜欢

转载自my.oschina.net/u/3452433/blog/1825021