Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


14.2.13.6 適応型ハッシュインデックス

適応型ハッシュインデックス (AHI) と呼ばれる機能を使用すると、トランザクションの機能や信頼性を犠牲にせずに、バッファープールのワークロードと十分なメモリーが適切に組み合わされたシステム上でインメモリーデータベースと同様に InnoDB を実行できます。この機能はサーバーの起動時に、innodb_adaptive_hash_index オプションを使用すると有効になり、--skip-innodb_adaptive_hash_index を使用すると無効になります。

監視対象の検索パターンに基づいて、MySQL はインデックスキーのプリフィクスを使用して、ハッシュインデックスを構築します。キーのプリフィクスは任意の長さにすることができますが、ハッシュインデックスには B ツリー内の値の一部しか表示されない可能性があります。ハッシュインデックスは、頻繁にアクセスされるインデックスのページに対する要求に応じて構築されます。

テーブルがメインメモリー内にほぼ完全に収容されている場合は、任意の要素の直接検索を有効にし、インデックス値をポインタの一種に変換すると、ハッシュインデックスを使用してクエリーを高速にすることができます。InnoDB には、インデックスの検索をモニターするメカニズムが備わっています。ハッシュインデックスの構築がクエリーにとって有益であると InnoDB が判断した場合は、自動的にそのインデックスが構築されます。

一部のワークロードでは、ハッシュインデックスの検索による高速化の方が、インデックスの検索をモニターしたり、ハッシュインデックスの構造を保持したりする追加の作業よりも重要です。複数の並列結合などの負荷の高いワークロードでは、適応型ハッシュインデックスへのアクセスを保護する読み取り/書き込みロックが競合の原因となる可能性があります。LIKE 演算子と % ワイルドカードを使用したクエリーも、AHI を使用する利点が得られない傾向があります。適応型ハッシュインデックスが必要のないワークロードでは、これをオフにすれば、不要なパフォーマンスのオーバーヘッドが削減されます。この機能が特定のシステムに適しているかどうかを事前に予測することは困難であるため、現実的なワークロードを使用して、有効にした場合と無効にした場合の両方でベンチマークを実行することを検討してください。MySQL 5.6 以上ではアーキテクチャーが変更され、以前のリリースよりも、適応型ハッシュインデックスを無効にすることに適したワークロードが多くなりました。ただし、デフォルトでは引き続き有効になっています。

常に、ハッシュインデックスはテーブル上の既存の B ツリーインデックスに基づいて構築されます。InnoDB は、B ツリーインデックスに対して InnoDB が検出した検索パターンに応じて、任意の長さの B ツリーに定義されたキーのプリフィクスに、ハッシュインデックスを構築できます。ハッシュインデックスは、頻繁にアクセスされるインデックスのページのみが対象となるように、部分的に構築できます。

適応型ハッシュインデックスの使用、およびこれを SHOW ENGINE INNODB STATUS コマンドの出力の SEMAPHORES セクションで使用した場合の競合をモニターできます。btr0sea.c で作成された RW ラッチ上で待機しているスレッドが多く見られる場合は、適応型ハッシュインデックスを無効にすると役立つ可能性があります。

ハッシュインデックスのパフォーマンス特性についての詳細は、セクション8.3.8「B ツリーインデックスとハッシュインデックスの比較」を参照してください。


User Comments
Sign Up Login You must be logged in to post a comment.