8.10.2.3 中点插入策略

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

使用中点插入策略时,LRU 链分为两部分:热子列 table 和热子列 table。两个部分之间的划分点不是固定的,但是密钥缓存 Management 系统要注意热部分不会“太短”,始终包含至少key_cache_division_limit%的密钥缓存块。 key_cache_division_limit是结构化键高速缓存变量的组成部分,因此其值是可以为每个高速缓存设置的参数。

当将索引块从 table 中读取到键高速缓存中时,索引块将放置在热子列 table 的末尾。达到一定数量的点击次数(访问该块)后,它将被提升到热子列 table。目前,对于所有索引块而言,提升一个块(3)所需的命中数都是相同的。

提升到热子列 table 中的块位于列 table 的末尾。然后,该块在该子列 table 中循环。如果该块在子列 table 的开头停留了足够长的时间,它将被降级到热子列 table。此时间由密钥缓存的key_cache_age_threshold组件的值确定。

阈值规定,对于包含* N *块的键高速缓存,将在最后N * key_cache_age_threshold / 100个匹配中未访问的热子列 table 开头的块移至热子列 table 的开头。然后,它将成为第一个驱逐候选对象,因为要替换的块始终是从温暖子列 table 的开头开始的。

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

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