Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

10.10.2.3 中点插入策略

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

当使用中点插入策略时,LRU链被分割成两个部分:热子列表和温子列表。这些部分之间没有固定的界限,但键缓存管理系统确保温子列表总是包含至少key_cache_division_limit%的键缓存块。key_cache_division_limit是结构化键缓存变量的一部分,因此其值可以根据缓存设置。

当从表中读取索引块到键缓存时,它将被放置在温子列表的末尾。随后,某个特定的访问次数(当前为3)后,它将被提升到热子列表中。

被提升到热子列表中的块将被放置在列表末尾,然后在这个列表中循环。如果块在列表开头停留了一段时间长 enough,則将其降级到温子列表中。这一时间由key_cache_age_threshold键缓存变量的值确定。

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

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

中点插入策略可以帮助改进性能,当执行一个需要扫描索引的查询,实际上将所有对高级B树节点的索引块推出缓存时。为了避免这种情况,您必须使用中点插入策略,并将key_cache_division_limit值设置为小于100的值。然后,在索引扫描操作中,频繁访问的高级节点也可以在热子列表中保留。