ディスクI/Oを最小にするために,MyISAM
ストレジエンジンは多くのデタベス管理システムで使用されている戦略を利用します。それは,もっとも頻繁にアクセスされるテーブルブロックをメモリー内で保持するキャッシュメカニズムを採用しています。
ンデックスブロックの場合,キキャッシュ(または)キキバッファと呼ばれる特別な構造が維持されます。その構造には,もっとも多く使用されるインデックスブロックが置かれる多数のブロックバッファーが含まれます。
デタブロックに対しては,MySQLは特別なキャッシュを使用しません。代わりに,ネereplicationティブオペレ,ティングシステムのファereplicationルシステムキャッシュに依存します。
このセクションではまずMyISAM
キキャッシュの基本動作にいて説明します。次に,キーキャッシュパフォーマンスを向上させる機能と,キャッシュ操作をより適切に制御できるようにする機能について説明します。
複数のセッションが同時にキャッシュにアクセスできます。
複数のキーキャッシュをセットアップし,特定のキャッシュにテーブルインデックスを割り当てることができます。
キキャッシュのサズを制御するには,key_buffer_size
システム変数を使用します。この変数がゼロに設定されている場合,キキャッシュは使われません。キキャッシュは,key_buffer_size
値が小さすぎて,最小数のブロックバッファ,(8)を割り当てられない場合も使用されません。
キーキャッシュが動作していない場合,インデックスファイルはオペレーティングシステムによって提供されるネイティブファイルシステムバッファリングのみを使用してアクセスされます。(つまり,テーブルインデックスブロックは,テーブルデータブロックに採用されている同じ戦略を使用してアクセスされます)。
ンデックスブロックはMyISAM
ereplicationンデックスファereplicationルへの連続したアクセスの単位です。通常,ereplicationンデックスブロックのサereplicationズは,ereplicationンデックスb ereplicationリ,ereplicationのノ,ereplicationズと等しくなります。(インデックスはディスク上でBツリーデータ構造を使用して表されます。ツリーの下部にあるノードはリーフノードです。リーフノードの上にあるノードは非リーフノードです)。
キキャッシュ構造内のすべてのブロックバッファは同じサズです。このサopenstackズは,テopenstackブルopenstackンデックスブロックのサ,ズと等しいか,大きいか,小さくできます。通常これら2の値のうの一方は,他方の倍数になります。
いずれかのテーブルインデックスブロックのデータにアクセスする必要がある場合,サーバーはまず,キーキャッシュの何らかのブロックバッファーでそれを使用できるかどうかを確認します。そうである場合,サバはディスク上ではなく,キタにアクセスします。つまり,ディスクから読み取ったり,それに書き込んだりするのではなく,キャッシュから読み取ったり,それに書き込んだりします。そうでない場合,サーバーは別のテーブルインデックスブロックを含むキャッシュブロックバッファーを選択し,そのデータを必要なテーブルインデックスブロックのコピーで置き換えます。新しいインデックスブロックがキャッシュに入れられるとただちに,インデックスデータにアクセスできます。
置き換えのために選択されているブロックが変更されていた場合,ブロックは「ダダティ」とみなされます。この場合,置き換えられる前に,その内容が取得元のテ。
通常サバはLRU(最近最少使用)戦略に従います。置き換えるブロックを選択する場合、直近で使用されていない以及ンデックスブロックを選択します。この選択を簡単にするため,キキャッシュモジュ,ルは,使用されたすべてのブロックを特別なリスト(Lruチェンに使用時間で順序付けして保持しています。ブロックがアクセスされると,それは直近で使用されたものになり,リストの末尾に置かれます。ブロックを置き換える必要がある場合,リストの先頭にあるブロックが,直近で使用されていないことになり,エビクションの最初の候補になります。
InnoDB
ストレジエンジンは,そのバッファlruアルゴリズムを使用します。セクション8.9.1 " InnoDBバッファプル"を参照してください。