MySQL 5.1 リファレンスマニュアル :: 6 最適化 :: 6.4 データベース構造の最適化 :: 6.4.6 MyISAMキーキャッシュ
« 6.4.5 MySQLにおけるインデックスの使用

6.4.6.1 共有キーキャッシュアクセス »
Section Navigation      [Toggle]
  • 6.4 データベース構造の最適化
  • 6.4.1 設計上の選択
  • 6.4.2 データの小型化
  • 6.4.3 カラムインデックス
  • 6.4.4 複合インデックス
  • 6.4.5 MySQLにおけるインデックスの使用
  • 6.4.6 MyISAMキーキャッシュ
    • 6.4.6.1 共有キーキャッシュアクセス
    • 6.4.6.2 複合キーキャッシュ
    • 6.4.6.3 ミッドポイント挿入戦略
    • 6.4.6.4 インデックスプレロード
    • 6.4.6.5 キーキャッシュブロックサイズ
    • 6.4.6.6 キーキャッシュの再構築
  • 6.4.7 MyISAMインデックス統計コレクション
  • 6.4.8 MySQL でのテーブルのオープンとクローズの方法
  • 6.4.9 1 つのデータベースに大量のテーブルを作成した場合の欠点

6.4.6. MyISAMキーキャッシュ

[+/-]

6.4.6.1. 共有キーキャッシュアクセス
6.4.6.2. 複合キーキャッシュ
6.4.6.3. ミッドポイント挿入戦略
6.4.6.4. インデックスプレロード
6.4.6.5. キーキャッシュブロックサイズ
6.4.6.6. キーキャッシュの再構築

ディスクI/Oを最小化するために、MyISAMストレージエンジンは多数のデータベースマネージメントシステムで使用される戦略を利用します。メモリ内で最も頻繁にアクセスされるテーブルブロックを保持するために、キャッシュメカニズムが使用されます。

  • インデックスブロックには、key cache (あるいはkey buffer)という特別な構造が保持されています。その構造には最も頻繁に使用されるインデックスがおかれた多数のブロックバッファが含まれます。

  • データブロックに対して、MySQLは特別なキャッシュを使用しません。代わりに、ネイティブオペレーティングシステムファイルシステムキャッシュに依存します。

このセクションでは最初にMyISAMキーキャッシュの基本的な演算について説明しています。キーキャッシュパフォーマンスを向上させる特徴や、キャッシュオペレーションをよりよくコントロールできる特徴について、説明されています。

  • 複合スレッドはキャッシュを同時にアクセスできます。

  • 複合キーキャッシュのセットアップおよび特定のキャッシュに対するテーブルインデックスの割り当てが可能です。

キーキャッシュのサイズを制限するには、key_buffer_sizeシステム変数を使用します。この変数がゼロにセットされた場合、利用できるキーキャッシュはありません。key_buffer_size値が小さすぎてブロックバッファの最小値が割り当てられない場合、キーキャッシュも使用できません(8)。

MySQL Enterprise.  key_buffer_sizeのサイズを最適化するための詳しいアドバイスについては、MySQL Network Monitoring and Advisory Serviceを購読してください。http://www-jp.mysql.com/products/enterprise/advisors.htmlを参照してください。

キーキャッシュが作動していない場合、インデックスファイルはオペレーティングシステムによるネーティブファイルシステムバッファのみ使用してアクセスされます。(つまり、テーブルインデックスブロックはテーブルデータブロック利用と同様の方法でアクセスされます)

インデックスブロックはMyISAMインデックスファイルにアクセスする隣接ユニットです。.通常、インデックスブロックのサイズは、インデックスB-treeのノードサイズと等価です。(インデックスはB-tree データ構造を使用してディスク上で表現されます。ツリーの元にあるノードはリーフノードです。リーフノードの上層にあるノードは非リーフノードです。)

キーキャッシュ構造内のブロックバッファは全て同サイズです。このサイズは、テーブルインデックスブロックサイズと比べて、等しい/大きい/小さい場合があります。通常これら二つの値のうち一方は、他方の複合となっています。

あるテーブルインデックスブロックのデータアクセスが必要な場合、サーバはまずキーキャッシュのどれかのブロックバッファ内で利用可能かどうかをまずチェックします。可能である場合、サーバはディスク上ではなく、キーキャッシュのデータにアクセスします。つまり、ディスクからではなく、キャッシュから読むかもしくはキャッシュに書きこみます。でなければ、異なるテーブルインデックスブロックを含むキャッシュブロックバッファを選択し、そのデータを要求されたテーブルインデックスブロックのコピーと置き換えます。新しいインデックスブロックがキャッシュ内におかれるとすぐ、インデックスデータはアクセス可能となります。

たまたま置き換えのために選択されたブロックが改良されていた場合、ブロックは「汚染されたモノ」とみなされます。この場合、置き換えられる前に、内容は元のテーブルインデックスにフラッシュされます。

通常サーバはLRU (Least Recently Used)戦略に従います。置換のためブロックを選択した場合、最近使用した中で最も初期に使用されたインデックスブロックを選択します。この選択を簡単にするために、キーキャッシュモジュールは、使用された全てのブロックの特別なキュー(LRU chain) を保持します。ブロックがアクセスされた場合、キューの最後尾に置かれます。ブロックを置換する必要がある場合、キューの最前部にあるブロックは、最近使用した中で最も初期に使用されたものであり、かつ最初の除去対象となります。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates