默认情况下,key 缓存管理系统使用简单的 LRU 策略来选择要驱逐的 key 缓存块,但它也支持一种更复杂的方法,称为 中点插入策略。
当使用中点插入策略时,LRU 链被分成两部分:一个热子列表和一个温子列表。两部分之间的分界点不固定,但密钥缓存管理系统会注意暖部分不会
“太短” ,始终包含至少
key_cache_division_limit
% 的密钥缓存块。
key_cache_division_limit
是结构化键缓存变量的一个组成部分,所以它的值是一个可以为每个缓存设置的参数。
当一个索引块从表中读取到键缓存中时,它被放置在暖子列表的末尾。在一定次数的命中(块的访问)之后,它被提升到热子列表。目前,提升一个块所需的命中数(3)对于所有索引块都是相同的。
提升到热子列表中的块被放置在列表的末尾。然后该块在该子列表中循环。如果该块在子列表的开头停留了足够长的时间,它将被降级到暖子列表。这个时间是由
key_cache_age_threshold
key缓存的组件的值决定的。
该阈值规定,对于包含N
块的键缓存,将在最后一次命中中未访问的热子列表开头的块
移动到温子列表的开头。然后它成为第一个被驱逐的候选者,因为用于替换的块总是从暖子列表的开头获取。
N
*
key_cache_age_threshold / 100
中点插入策略使您能够将更有价值的块始终保留在缓存中。如果您更喜欢使用普通 LRU 策略,请将该
key_cache_division_limit
值设置为默认值 100。
当执行需要索引扫描的查询有效地将与有价值的高级 B 树节点对应的所有索引块推出缓存时,中点插入策略有助于提高性能。为了避免这种情况,您必须使用中点插入策略,并将
key_cache_division_limit
集合设置为远小于 100。然后在索引扫描操作期间,有价值的频繁命中节点也会保留在热子列表中。