MySQL 8.0 リファレンスマニュアル


8.10.2.3 ミッドポイント挿入戦略

デフォルトで、キーキャッシュ管理システムは、削除されるキーキャッシュブロックの選択に、単純な LRU 戦略を使用しますが、ミッドポイント挿入戦略というさらに高度な方法もサポートしています。

ミッドポイント挿入戦略を使用すると、LRU チェーンがホットサブリストとウォームサブリストの 2 つのパートに分割されます。 2 つのパート間の分割点は固定ではありませんが、キーキャッシュ管理システムでは、ウォームパートが短くなりすぎず、常にキーキャッシュブロックの少なくとも 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 よりかなり小さい値に設定して、ミッドポイント挿入戦略を使用する必要があります。 これにより、インデックススキャン操作中でも、価値の高い頻繁にヒットされるノードがホットサブリストに保持されます。


関連キーワード:  インデックス, テーブル, InnoDB, キャッシュ, ブロック, 戦略, キー, 挿入, ステートメント, 結合