mysql优化之查询缓存

前言

开启mysql缓存后,数据没有更新的情况下,相同的查询sql会使用缓存数据返回结果。在数据更新较少,类似查询较多的情况下,使用mysql缓存可以显著提升查询效率。

mysql查询缓存参数设置

在这里插入图片描述

  • have_query_cache表示是否支持查询缓存,YES表示支持
  • query_cache_type表示缓存类型,OFF表示关闭查询缓存,ON表示开启查询缓存,DEMAND表示用户自定义查询缓存
  • query_cache_limit表示支持的最大单条查询sql数据量
  • query_cache_min_res_unit表示查询缓存最小单位
  • query_cache_size表示查询缓存空间大小
  • query_cache_wlock_invalidate表示查询缓存是否支持写锁,OFF表示不支持,即读取数据不考虑写锁,ON表示支持,即读取数据会被写锁阻塞

在这里插入图片描述

查询缓存使用

  • 只有字符串相等查询sql才使用相同缓存,即select name from city与SELECT name FROM city不使用同一个缓存。
  • 在query_cache_type为ON的情况下,默认所有查询都使用缓存,我们可以使用sql_no_cache显示指定某个查询不使用缓存
select sql_no_cache name from city;
  • 在query_cache_type为DEMAND的情况下,需要使用sql_cache指定某个查询使用缓存
select sql_cache name from city;

缓存使用情况查询

在这里插入图片描述

  • Qcache_free_blocks表示已分配内存块中空闲块数量;
  • Qcache_total_blocks表示当前查询缓存占用的内存块数量;
  • Qcache_free_memory表示缓存空闲空间大小;
  • Qcache_hits表示缓存命次数;
  • Qcache_inserts表示缓存未命中时,数据写入缓存次数;
  • Qcache_queries_in_cache表示缓存查询语句数量;
  • Qcache_lowmem_prunes表示缓存修剪次数,缓存满时,会使用LRU算法移除最久未被使用缓存,此值较大,说明缓存空间太小;
  • Qcache_not_cached表示没有被缓存的查询sql数量。

查询缓存的碎片率 =(Qcache_free_blocks / Qcache_total_blocks)* 100%

如果Qcache_free_blocks的值过大,则碎片率越高,证明我们缓存内存碎片略多,可以尝试适当的调小query_cache_min_res_unit的值,也可以使用 FLUSH QUERY CACHE语句来清理缓存碎片。

查询缓存利用率 = (query_cache_size - Qcache_free_memory) / query_cache_size * 100%

如果查询缓存利用率太低,则表示query_cache_size设置的可能过大,可适度调小,如果缓存利用率非常高,同时Qcache_lowmem_prunes的值比较大,则表示query_cache_size的值设置的略小。
query_cache_min_res_unit的预估值参考计算公式: (query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache

查询缓存命中率 = (Qcache_hits / Com_select)* 100%

上述公式中的Com_select表示查询语句的执行次数(这样描述并不准确),可以使用如下语句获得查询语句的执行次数
show status like ‘Com_select%’;

重置缓存

reset query cache;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值