預設情況下,金鑰快取管理系統使用簡單的 LRU 策略來選擇要逐出的金鑰快取區塊,但它也支援一種更複雜的方法,稱為中點插入策略。
當使用中點插入策略時,LRU 鏈會分成兩個部分:熱子清單和暖子清單。兩個部分之間的分界點不是固定的,但金鑰快取管理系統會注意暖部分不會「太短」,始終至少包含金鑰快取區塊的 key_cache_division_limit
百分比。key_cache_division_limit
是結構化金鑰快取變數的組成部分,因此其值是每個快取都可以設定的參數。
當從表格中讀取索引區塊到金鑰快取中時,它會被放置在暖子清單的末尾。在經過一定數量的點擊 (存取該區塊) 後,它會被提升到熱子清單。目前,提升區塊所需的點擊次數 (3) 對於所有索引區塊都是相同的。
提升到熱子清單中的區塊會被放置在列表的末尾。然後,該區塊會在該子清單內循環。如果該區塊在子清單的開頭停留足夠長的時間,它會被降級到暖子清單。此時間由金鑰快取的 key_cache_age_threshold
組成部分的值決定。
閾值規定,對於包含 N
個區塊的金鑰快取,在最後
次點擊內沒有存取過熱子清單開頭的區塊,將會被移動到暖子清單的開頭。然後,它會成為第一個逐出候選者,因為用於取代的區塊總是從暖子清單的開頭取出。N
* key_cache_age_threshold / 100
中點插入策略使您能夠將更有價值的區塊始終保留在快取中。如果您偏好使用普通的 LRU 策略,請將 key_cache_division_limit
值設定為其預設值 100。
當執行需要索引掃描的查詢時,若索引掃描有效地將對應於重要高階 B 樹節點的所有索引區塊推出快取,則中點插入策略有助於提高效能。為了避免這種情況,您必須使用中點插入策略,並將 key_cache_division_limit
設定為遠小於 100 的值。如此一來,在索引掃描操作期間,重要的常用節點也會被保留在熱子列表中。