Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Midpoint Insertion Strategy

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 次命中中没有被访问,将被移到温子列表的开头。然后,它将成为第一个候选项,因为替换总是从温子列表的开头取块。

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

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