【发布时间】:2017-07-09 08:56:53
【问题描述】:
什么是 query_cache_min_res_unit 设置查询缓存时 mysql 中的选项。另外,我在互联网上阅读有关 query_cache_min_res_unit 的信息时看到了一个词 block,但我不明白那个 block 词是什么意思。
谁能用简单明了的话告诉我这两个是什么意思,在哪里以及为什么使用这两个?
【问题讨论】:
什么是 query_cache_min_res_unit 设置查询缓存时 mysql 中的选项。另外,我在互联网上阅读有关 query_cache_min_res_unit 的信息时看到了一个词 block,但我不明白那个 block 词是什么意思。
谁能用简单明了的话告诉我这两个是什么意思,在哪里以及为什么使用这两个?
【问题讨论】:
看看这里: https://mariadb.com/kb/en/mariadb/query-cache/
上面写着:
限制查询缓存大小的主要方法有两种。第一的, 以字节为单位的总大小由 query_cache_size 服务器确定 多变的。各种查询缓存结构大约需要 40KB。
查询缓存大小以 1024 字节块为单位分配,因此它应该 设置为 1024 的倍数。
查询结果使用最小块大小存储 query_cache_min_res_unit。 检查两个条件以使用良好的值 这个变量:查询缓存插入带锁的结果块,每个新的 块插入锁查询缓存,小值会增加锁和 碎片化并为小结果浪费更少的内存,一个大的价值 会增加内存使用,浪费更多内存以获得小的结果,但它 减少锁。测试您的工作负载以微调此变量。
【讨论】:
与其回答这个问题,我会建议答案是没有实际意义的......
不要将查询缓存用于严肃的生产站点。 任何 写入表会导致清除该表的 QC 中的 所有 条目。出于这个原因,一个拥有大量写入的网站很少使用 QC。
而且,我将针对真正的问题进行测试...由于没有好的指标(在SHOW GLOBAL STATUS 中)来判断query_cache_min_res_unit 是太大还是太小,所以最好不要管它。
【讨论】:
BLOCK 指本例中的字节数。
query_cache_min_res_unit 是为存储在查询缓存结果中的每个结果保留的最小字节数。
经过4年的实际生产使用,512在我支持的应用中运行良好。
【讨论】:
我一直在寻找一个简单的解释,最终想出了:
默认值1024 bytes 表示,例如,如果查询大小为10 bytes,它将占用query_cache_size 的1024 bytes,这是一种浪费,因为您可以将其保存在例如64 byes 块中。
但是如果为此创建64 bytes 块并且查询大小为2000 bytes,那么您将创建31 个64 bytes 块以将2000 bytes 查询存储在缓存中,它会增加碎片...
因此您必须尝试使用该数字才能为您的应用找到最佳价值。
根据文档this 将帮助您微调此设置:
SHOW STATUS LIKE 'Qcache%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 1158 |
| Qcache_free_memory | 3760784 |
| Qcache_hits | 31943398 |
| Qcache_inserts | 42998029 |
| Qcache_lowmem_prunes | 34695322 |
| Qcache_not_cached | 652482 |
| Qcache_queries_in_cache | 4628 |
| Qcache_total_blocks | 11123 |
+-------------------------+----------+
【讨论】: