mysql查询缓存参数配置

前言

使用mysql对数据检索时,为了提升查询性能,引入了缓存的配置,通过设置缓存相关参数,在一定范围内可以大大提升查询效率

举例来说,当同一条查询语句打到mysql服务器,如果配置了查询缓存,就会将这个结果集存放在缓存空间,下一次同一条sql过来时就直接走缓存,这样就可以提升查询效率

1、查看mysql服务器缓存相关配置参数

show status like 'Qcache%';

在这里插入图片描述
Qcache_free_memory:Query Cache中目前剩余的内存大小,通过这个参数可以较为准确的观察到当前系统的Query Cache是否充足,是否需要增加还是过剩了

Qcache_lowmem_prunes:多少条query语句因为内存不足而从Query Cache中清除掉,通过Qcache_lowmem_prunes和Qcache_free_memory相互结合,能更清楚的了解到系统中的Query Cache是否真的足够,是否非常频繁的出现因为内存不足而存在Query被清除的现象,这个数字要放在一个较长的时间段看才有意义,如果这个数字在不断增长,表示可能存在较严重的碎片化现象,或者内存很少了

Qcache_total_blocks:当前Query Cache中block的数量

Qcache_free_blocks:缓存中相邻内存块的个数,如果该值显示较大,说明Query Cache中的内存碎片较多了

查询缓存碎片率: Qcache_free_memory /Qcache_total_blocks * 100% ,经验值判断,如果查询碎片率超过20%,可以使用 flush query cache来整理缓存碎片

mysql中Block的默认大小为4KB,这个值可以手动调整,设置的较大的话,对于大数据的查询有好处,但是如果你实际查询数据时都是小数据,就容易造成内存碎片

Qcache_hits:表示有多少次命中缓存,我们可以通过这个值来验证我们查询的缓存效果,数字越大效果越理想

Qcache_inserts:表示多少次未命中而插入,就是说新来的SQL请求在缓存中没有找到,不得不执行查询处理,执行查询处理之后将结果insert到缓存中,这样的情况次数越大,表示查询缓存应用的数量越少,效果也就越不理想

Qcache_queries_in_cache:当前的Query Cache 中Query数量,即当前的缓存中使用到的缓存查询数量

Qcache_not_cached:未进入查询缓存的select数量

2、设置置Query Cache参数

set GLOBAL query_cache_size=1024000000

或者在my,cnf文件中设置

注意:

  • query_cache_size(查询缓存大小,QC的单位最小是1024byte,所以如果你设定的一个不是1024的倍数的值,这个值将会被四舍五入到最接近或等于1024的倍数)
  • query_cache_limit,超出此大小的查询将不被缓存,限定了单个查询缓存的最大内存数量(图中表示当前的单条select最大的查询缓存大小超过了1MB之后将不会被缓存)
    在这里插入图片描述

3、设置Query Cache Type参数

query_cache_type:缓存类型,决定缓存什么样的查询,这个值不能随便设置,而必须为数字,可选择的数值如下:

  • 0:OFF,相当于禁用(5.7默认禁用了查询缓存,需要在my.cnf中进行设置)
  • 1:ON,缓存所有结果,除非你的select语句显示使用了SQL_NO_CACHE禁用了查询缓存
  • 2:DEAND,只缓存select语句中通过SQL_CACHE指定需要缓存的查询

在这里插入图片描述
4、设置Query Block参数

  • query_cache_min_res_unit:缓存块的最小大小query_cache_min_res_unit最小单位是4KB,设置的大点对大数据查询有好处,但是小数据多的话容易产生内存碎片造成资源浪费
  • 单个查询占用缓存的平均值:(query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache
  • 查询缓存利用率:(query_cache_size - Qcache_free_memory)/ query_cache_size * 100%,查询缓存利用率在25%以下说明query_cache_size 设置的过大了,可以适当减小,查询缓存利用率在80%以上,而且 Qcache_lowmem_prunes 》 50说明query_cache_size 设置的有点小,要不就是碎片太多
  • 查询缓存命中率,Qcache_hits / (Qcache_hits + Qcache_inserts) * 100%

5、查询排序缓存区设置

在这里插入图片描述

sort_buffer_size

  • 每个需要排序的线程分配的一个缓存区域,通过设置该参数可以加速 order by 或者group by的操作(在开发过程中,经常碰到对一个大批量查询出来的数据进行order by或者group by的操作,如果设置了这项参数,利用排序缓冲空间,可以大大提升排序的速度)
  • sort_buffer_size是一个connection级别的参数,在每个connection第一次需要使用这个buffer的时候,一次性分配指定数量大小的内存
  • sort_buffer_size不是越大越好,由于是connection级别的参数,过大的设置在遇到高并发场景下可能会很快耗尽系统资源,例如1000个请求的并发的消耗大小为:1000 * sort_buffer_size(2MB) = 2G,这个内存占用就比较吓人了

本篇主要总结了一些和mysql查询缓存相关的参数配置,合理运用这些参数,可以在一定范围内提升mysql服务器的查询性能,还需要结合实际情况进行反复的调试以达到合理的参数值的配置,本篇到此结束,最后感谢观看!

猜你喜欢

转载自blog.csdn.net/zhangcongyi420/article/details/112795799