query_cache_size,Qcache_total_blocks和query_alloc_block_size

时间:2017-07-22 21:48:00

标签: mysql mariadb query-cache

我的理解是query_alloc_block_size确定查询缓存的块大小。在我的情况下,它是默认的8K

当我计算query_cache_size / Qcache_total_blocks时,我得到的数字范围是1-4K。他们为什么会随着时间而改变?为什么它们会与query_alloc_block_size不同?

query_cache_min_res_unit的默认值也是4K。为什么它会小于query_alloc_block_size?它不需要是query_alloc_block_size的倍数吗?

显然我误解了一些非常基本的东西

2 个答案:

答案 0 :(得分:1)

好吧,我无法回答具体问题。

我对QC的看法:如果您对正在运行查询的表执行适度的写入操作,请将其关闭。

其他一些指标和建议(如果你打开它):

  • QC的大小 - query_cache_size
    推荐8e6到100e6 MB。如果超出范围,太小=没有多大​​用处。太大=开销太大。推荐0或不超过50M。
  • Pct查询缓存免费 - Qcache_free_memory / query_cache_size
    建议0到100%。如果超出范围,则降低query_cache_size 降低它释放RAM用于其他用途,但由于可用空间会随着时间的推移而变化,这一读数可能会欺骗你。
  • 在QC中走出房间 - Qcache_lowmem_prunes / Uptime
    推荐0到15 /秒。如果超出范围,请增加query_cache_size
  • SQL_CACHE尝试但忽略了 - Qcache_not_cached / Uptime
    建议0到40 /秒。如果超出范围,重新思考缓存;调qcache
  • 未在QC中缓存的SELECT的百分比。 - Qcache_not_cached / (Qcache_hits + Com_select + Qcache_not_cached)
    推荐0至30%。如果超出范围,QC不是很有用。
  • 查询缓存中的碎片 - Qcache_free_blocks * 4096 / query_cache_size
    推荐0到1.如果超出范围,请减少query_cache_min_res_unit
  • 点击插入比率 - 高是好的 - Qcache_hits / Qcache_inserts
    推荐(偏好高值)1 - 10.如果超出范围,请考虑关闭查询缓存。
  • 命中率 - 使用QC的选择 - Qcache_hits / (Qcache_hits + Com_select)
    推荐(偏好高值)25 - 100%。如果超出范围,请考虑关闭查询缓存。
  • 查询缓存命中率 - Qcache_hits / (Qcache_hits + Qcache_inserts + Qcache_not_cached)
    推荐(偏好高值)30 - 100%。如果超出范围,可能最好关闭质量控制。
  • 此时缓存的查询 - Qcache_queries_in_cache
    推荐(偏好高值)500 - 100000.
  • 查询缓存中的碎片。 - Qcache_free_blocks / Qcache_total_blocks
    推荐0至30%。如果超出范围,各种各样的事情。
  • 失效通知/秒。 - Qcache_inserts - Qcache_queries_in_cache / Uptime
    推荐0到100 /秒。
  • query_alloc_block_size vs formula - (query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache / query_alloc_block_size
    建议0.5到2.如果超出范围,请调整query_alloc_block_size
  • 子查询缓存命中率 - Subquery_cache_hit / ( Subquery_cache_hit + Subquery_cache_miss )
    推荐(偏好高值)60 - 100%。如果超出范围,请考虑SET optimizer_switch =' subquery_cache = off';

答案 1 :(得分:0)

  1. 如果已设置query_cache_size,则GLOBAL或SESSION或query_alloc_block_size已设置为GLOBAL或SESSION,则query_cache_size / query_alloc_block_size = answer的结果可能不同。 Qcache_total_blocks始终是此计算的结果。
  2. 将query_cache_min_res_unit视为存储查询结果所需的最小字节数。您可以在一个query_alloc_block_size中存储数千个计数结果。考虑使用最小值512,以节省QC内存。 这个链接会有所帮助。 https://dev.mysql.com/doc/refman/5.7/en/query-cache-configuration.html