MySQL[PGA] query_cache_size

query_cache_size

  • Mysql高速查询缓存(简称QC)

  • 将SELECT语句和查询结果存放再缓冲区中,若有同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。

  • show global status like 'Qcache_%' 查看QC,可以知道QC设置是否合理

  • 如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓存不够的情况

  • 如果Qcache_hits的值非常大,则表明查询缓存使用非常频繁,此时需要增加缓冲大小

  • 如果Qcache_hits的值不大,则表明你的查询重复率很低,这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲

  • 在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓存(ex:SELECT SQL_NO_CACHE * FROM XX WHERE YY;)

  • query_cache_limit = 2M, 不缓存查过2M的查询结果

  • query_cache_min_res_unit = 512K, 设置每个QC单元大小,提高QC利用率(Qcache_queries_in_cache不大,但Qcache_free_memory较大,就需要减小query_cache_min_res_unit)

关闭查询缓存:

query_cache_type=0

query_cache_size=0

Qcache_free_memory:查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,DBA可以根据实际情况做出调整。 
Qcache_hits:表示有多少次命中缓存。我们主要可以通过该值来验证我们的查询缓存的效果。数字越大,缓存效果越理想。 
Qcache_inserts: 表示多少次未命中然后插入,意思是新来的SQL请求在缓存中未找到,不得不执行查询处理,执行查询处理后把结果insert到查询缓存中。这样的情况的次 数,次数越多,表示查询缓存应用到的比较少,效果也就不理想。当然系统刚启动后,查询缓存是空的, 这很正常。 
Qcache_lowmem_prunes:该参数记录有多少条查询因为内存不足而被移除出查询缓存。通过这个值,用户可以适当的调整缓存大小。 
Qcache_not_cached: 表示因为query_cache_type的设置而没有被缓存的查询数量。 
Qcache_queries_in_cache:当前缓存中缓存的查询数量。 
Qcache_total_blocks:当前缓存的block数量。

 

可参考:MYSQL 中query_cache_size小结

http://jackyrong.iteye.com/blog/2173523

在MySQL里QC是由一个全局锁在控制,每次更新QC的内存块都需要进行锁定。
例如,一次查询结果是20KB,当前 query_cache_min_res_unit 值设置为 4KB(默认值就是4KB,可调整),那么么本次查询结果共需要分为5次写入QC,每次都要锁定,可见其成本有多高。

线上环境到底要不要开启query cache

http://blog.csdn.net/liqfyiyi/article/details/50178565