TOPサーバ構築・運用> key_buffer_sizeとは
MySQLチューニング
はじめてのMySQLチューニング

第5回:key_buffer_sizeの違いによるパフォーマンス比較

著者:アールワークス  田中 靖之   2007/7/30
1   2  3  次のページ
key_buffer_sizeとは

   key_buffer_sizeとは、「インデックスブロック用に使用されるバッファメモリの最大値」をあらわします。MySQLのリファレンスマニュアルでは、しばしば「インデックス=キー」として表現されています。つまり「作成したインデックスをメモリ上に維持しておくために、物理メモリ上に確保するバッファの最大値」ということになります。

   key_buffer_sizeはデフォルト状態では以下の通り約8Mbytesに設定されています。

(画像をクリックすると別ウィンドウに拡大図を表示します)

   なおshow variablesで表示される単位はbytesです。


現在使用されているブロック数の確認

   MySQLでは、キーをブロックという単位で扱います。1ブロックのサイズ(key_cache_block_size)はデフォルトで1024bytesです。現在のキーバッファの使用量は、以下のようにして確認できます。


(画像をクリックすると別ウィンドウに拡大図を表示します)

   各項目は以下の通りの意味を持ちます。

パラメータ 意味
Key_blocks_not_flushed 変更されたが、ディスクへのフラッシュはまだされていないキーキャッシュのキーブロック
Key_blocks_unused キーキャッシュの未使用ブロックの数
Key_blocks_used キーキャッシュのブロックの使用数。この値は、これまで同時使用したブロックの最大値

表1:各項目の意味

   つまりこの場合、キーバッファは7248ブロックが空いていて(Key_blocks_unused)、これまでに1ブロックも使われていない(Key_blocks_used)ことがわかります。今のところインデックスを1つも作成していないのですから、この結果は当然です。


インデックスを作成する

   key_buffer_sizeを検討するには、まずはじめにインデックスを作成しなければはじまりません。そのためにはcreate indexコマンドで以下のようにpassカラムのインデックスを作成します。その後、show indexコマンドで作成したインデックスを確認することができます。


(画像をクリックすると別ウィンドウに拡大図を表示します)

   「Column_name」がpassとなっているものが作成したインデックスで、正常に作成されたことがわかります。しかしそれ以外にusernameというインデックスもあります。これは、http_authテーブル作成時にusernameを主キーに指定したため、暗黙的に生成されたインデックスです。また最後にKey_block_usedを確認すると、2928ブロックが一時的に使用されたということがわかります。

   同様にして、uidやgidについてもindexを作成しておいてください。

1   2  3  次のページ


株式会社アールワークス 田中 靖之
著者プロフィール
株式会社アールワークス  田中 靖之
ネットワークインテグレーション部
主にWebサービス系のシステム運用監視を担当するネットワークインテグレーション部に所属。システム改善やチューニングを顧客と共に考える姿勢を大事にしている。


INDEX
第5回:key_buffer_sizeの違いによるパフォーマンス比較
key_buffer_sizeとは
  key_bufferの効果を確認する
  key_buffer_sizeデチューン後の測定結果