文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  中点插入策略

10.10.2.3 中点插入策略

默认情况下,键缓存管理系统使用简单的 LRU 策略来选择要驱逐的键缓存块,但它也支持一种更复杂的方法,称为 中点插入策略。

使用中点插入策略时,LRU 链被分为两个部分:热子列表和暖子列表。两个部分之间的划分点不是固定的,但键缓存管理系统会确保暖部分不会 太短,始终包含至少 key_cache_division_limit 百分比的键缓存块。 key_cache_division_limit 是结构化键缓存变量的一部分,因此它的值是可以为每个缓存设置的参数。

当索引块从表中读取到键缓存时,它被放置在暖子列表的末尾。在一定次数的命中(访问块)后,它被提升到热子列表中。目前,提升块所需的命中次数(3)对于所有索引块都是相同的。

提升到热子列表中的块被放置在列表的末尾。然后块在这个子列表中循环。如果块在子列表的开头停留足够长的时间,它将被降级到暖子列表。这段时间由 key_cache_age_threshold 键缓存组件的值决定。

阈值规定,对于包含 N 个块的键缓存,如果热子列表开头的块在过去 N * key_cache_age_threshold / 100 次命中中没有被访问,则将其移动到暖子列表的开头。然后它成为第一个要驱逐的候选者,因为要替换的块总是从暖子列表的开头获取。

中点插入策略使您能够始终将更有价值的块保留在缓存中。如果您希望使用普通的 LRU 策略,请将 key_cache_division_limit 值设置为其默认值 100。

当执行需要索引扫描的查询有效地将对应于有价值的高级 B 树节点的所有索引块从缓存中推出去时,中点插入策略有助于提高性能。为了避免这种情况,您必须使用中点插入策略,并将 key_cache_division_limit 设置为远小于 100 的值。然后,即使在索引扫描操作期间,有价值的、经常命中的节点也会保留在热子列表中。