Documentation Home
MySQL 8.0 参考手册  / 第8章优化  / 8.10 缓冲和缓存  / 8.10.2 MyISAM 键缓存  /  8.10.2.3 中点插入策略

8.10.2.3 中点插入策略

默认情况下,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。然后在索引扫描操作期间,有价值的频繁命中节点也会保留在热子列表中。