TOPサーバ構築・運用> クエリキャッシュサイズの最適値を知る
MySQLチューニング
はじめてのMySQLチューニング

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

著者:アールワークス  田中 靖之   2007/8/7
1   2  3  次のページ
クエリキャッシュサイズの最適値を知る

   MySQLサーバには、MySQLクライアントからのクエリとその実行結果をキャッシュし、次回から同じ内容のクエリが要求された場合にキャッシュから応答する、クエリキャッシュという仕組みがあります。キャッシュから応答させることによってデータベースへアクセスする負荷を軽減し、また応答速度自体の向上も狙ったものです。

   デフォルト状態ではクエリキャッシュを使用しない設定になっています。以下のように現在の「クエリキャッシュに使用するメモリ量の最大値」であるquery_cache_sizeを確認してください。

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

   デフォルトでは0Mbytesに設定されていて「クエリキャッシュを使用しない」という状態であることがわかります。なおshow variablesで表示される単位はkey_buffer_size同様bytesです。


query_cache_sizeのチューニング

   まずクエリキャッシュを使用するように設定するために、「/etc/my.cnf」を以下のように設定してください。

[mysqld]
max_connections=450
thread_cache=450
table_cache=450
query_cache_size = 16M

   その後、MySQLのサービスを再起動します。

# /etc/init.d/mysql restart


クエリキャッシュに関する情報

   MySQLが再起動したら、改めてquery_cache_sizeを確認してみましょう。今回はクエリキャッシュに関わる他の値も一緒に表示させます。


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

   すると/etc/my.cnfで設定した通り、約16Mbytesになっていることがわかります。また一緒に表示されているその他のパラメータの意味は以下の通りです。

パラメータ 意味
have_query_cache クエリキャッシュを使用可能かどうか
query_cache_limit キャッシュするクエリ結果の最大値
query_cache_min_res_unit クエリキャッシュのブロックサイズ
query_cache_type OFF:結果をキャッシュしない
ON:SELECT SQL_NO_CACHE…以外のクエリをキャッシュする
DEMAND:SELECT SQL_CACHE…のクエリのみキャッシュする
query_cache_wlock_invalidate 書込みロック獲得時に、ロックしたテーブルに関するクエリキャッシュを無効にするかどうか

   今回はこれらのパラメータに関してはチューニングを行いませんが、例えばクエリ結果がかなり大きい場合はquery_cache_limitを大きくしたり、逆に小さい場合にはquery_cache_min_res_unitを小さくするなどの手法があります。

1   2  3  次のページ


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


INDEX
第6回:query_cache_sizeの違いによるパフォーマンス比較
クエリキャッシュサイズの最適値を知る
  クエリキャッシュを使用した測定結果
  ブロック単位のメモリ割り当て