设置查询缓存时,mysql中的 query_cache_min_res_unit 选项是什么。我在互联网上阅读 query_cache_min_res_unit 时也看到了阻止这个词,但我不明白阻止这个词是什么意思。
任何人都可以用简单易用的字来告诉我这两个词的含义以及使用这两者的地点和原因?
答案 0 :(得分:1)
看看这里: https://mariadb.com/kb/en/mariadb/query-cache/
它说:
有两种主要方法可以限制查询缓存的大小。第一, 整体大小(以字节为单位)由query_cache_size服务器确定 变量。各种查询缓存结构需要大约40KB。
查询缓存大小以1024字节块分配,因此它应该 设置为1024的倍数。
使用最小块大小存储查询结果 query_cache_min_res_unit。检查两个条件以使用好的值 此变量:查询缓存插入带锁的结果块,每个都是新的 块插入锁定查询缓存,一个小值会增加锁定和 碎片和浪费更少的记忆,小的结果,一个很大的价值 会增加内存使用浪费更多内存以获得小结果但是它 减少锁。测试您的工作量以微调此变量。
答案 1 :(得分:0)
而是回答这个问题,我会建议答案没有实际意义......
不要在严肃的生产网站上使用查询缓存。 任何写入表会导致清除该表的QC中的所有条目。因此,具有大量写入的站点对QC几乎没有用处。
而且,我会抓住真正的问题...因为没有好的指标(SHOW GLOBAL STATUS
)来判断query_cache_min_res_unit
是太大还是太小,所以最好是别管它了。
答案 2 :(得分:0)
BLOCK指的是这种情况下的字节数。
query_cache_min_res_unit是存储在查询缓存结果中的每个结果的最小字节数。
经过4年的实际生产使用后,512适用于我所支持的应用程序。
答案 3 :(得分:0)
我一直在寻找对此的简单解释,最终想出了:
默认值 1024 bytes
表示,例如,如果查询大小为 10 bytes
,它将占用 1024 bytes
的 query_cache_size
,这是一种浪费,因为您可以将其保存在例如 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 |
+-------------------------+----------+