Server

MySQLのクエリキャッシュ設定

Category

Server

MySQLのバージョン4.0.1以降には、クエリキャッシュという機能があります。
クエリキャッシュには、SELECTクエリのテキストとクライアントに送られた結果が格納され、以後同じクエリを受け取った際、クエリの解析と実行を行わず、クエリキャッシュから結果を取り出します。同じクエリが何度も実行される環境下では、クエリキャッシュを使う方が効率的で、かつパフォーマンスを向上させることができます。
今回は、MySQLのクエリキャッシュ設定について紹介します。

Keyword:MySQL,クエリキャッシュ,高速化

MySQLのクエリキャッシュ設定

MySQLのクエリキャッシュ設定

MySQLのデフォルト設定では、クエリキャッシュの設定は無効になっていますので、my.cnfで有効にしてやります。

my.cnf

# viコマンドでmy.cnfを編集
vi /etc/my.cnf

# 以下を追記
[mysqld]
query_cache_limit=1M
query_cache_min_res_unit=4k
query_cache_size=24M
query_cache_type=1

# MySQLを再起動
/etc/init.d/mysqld restart

補足

●以下を追記
[query_cache_limit=1M]
キャッシュの上限(これ以上の結果はキャッシュしません)。
デフォルト値は1MB。

[query_cache_min_res_unit=4k]
MySQLのバージョン4.1以降で利用できる変数。
メモリの割り当て処理はコストが高いため(時間的に)、クエリキャッシュでのブロックの割り当ては、ここで指定された最小サイズで行われます。
デフォルト値は4KB(ほとんどの場合、これで十分だと思います)。

[query_cache_size=24M]
クエリキャッシュに割り当てるメモリサイズ。
デフォルト値は0(この値を0にするとクエリキャッシュは無効になります)。
環境に合わせて設定してください。

[query_cache_type=1]
0でOFF設定。
⇒キャッシュの格納・結果の取り出しを行いません。
1でON設定。
⇒SELECT SQL_NO_CACHEで始まるステートメント以外をキャッシュします。
2でDEMAND設定。
⇒SELECT SQL_CACHEで始まるステートメントだけをキャッシュします。
デフォルト値は1。

クエリキャッシュを有効にするだけの場合、”query_cache_size”のみをmy.cnfに追記しても構いません(その他の値はデフォルト値が使用されます)。
後々変更する可能性がある場合、上記のようにデフォルト値を設定しておくと変更が簡単です(コマンドでMySQLサーバーに接続してから設定することも可能ですが、my.cnfに追記する方が楽です)。

●MySQLを再起動
設定を反映させるため、MySQLを再起動します。

次に、MySQLサーバーに接続し、クエリキャッシュの状況を確認します。

MySQL

# MySQLサーバーに接続
mysql -u ユーザー名 -p データベース名
Enter password:

# クエリキャッシュが有効か確認
show variables like 'query_cache_%';

+------------------------------+---------+
| Variable_name                | Value   |
+------------------------------+---------+
| query_cache_limit            | 1048576 |
| query_cache_min_res_unit     | 4096    |
| query_cache_size             | 25165824|
| query_cache_type             | ON      |
| query_cache_wlock_invalidate | OFF     |
+------------------------------+---------+

# キャッシュ状況を確認
show status like 'Qcache%';

+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Qcache_free_blocks      | 230      |
| Qcache_free_memory      | 24499144 |
| Qcache_hits             | 11745    |
| Qcache_inserts          | 13136    |
| Qcache_lowmem_prunes    | 0        |
| Qcache_not_cached       | 805      |
| Qcache_queries_in_cache | 412      |
| Qcache_total_blocks     | 1070     |
+-------------------------+----------+

# キャッシュのクリア
reset query cache;

# MySQLサーバーを切断
exit

補足

●MySQLサーバーに接続
mysqlコマンドを使用しますので、MySQLサーバーに接続します。
MySQLクライアントを起動すると、プロンプトが”mysql>”となります。

続けてパスワードを入力します。
パスワードは表示されませんので、入力後Enterキーを押します。

●クエリキャッシュが有効か確認
“query_cache_size”が0でなければ、有効になっています。
今回は24MBで設定しました。

●キャッシュ状況を確認
クエリキャシュされているか確認するコマンドです。

[Qcache_free_blocks]
クエリキャッシュの空きブロック数。

[Qcache_free_memory]
クエリキャッシュの空きメモリサイズ。

[Qcache_hits]
キャッシュヒット数。

[Qcache_inserts]
キャッシュに加えられたクエリ数。

[Qcache_lowmem_prunes]
メモリ不足によりキャッシュから削除されたクエリ数。
この値が大きい場合、”query_cache_size”が不足していると考えられるので、キャッシュサイズを増やすことでキャッシュ効率を上げる事ができます。

[Qcache_not_cached]
キャッシュされなかったクエリ数。
SQL_NO_CACHEキーワード付きでSQLが発行されたり(“query_cache_type”がONの場合)、結果が”query_cache_limit(デフォルト値は1MB)”より大きい場合等、クエリ結果はキャッシュされません。

[Qcache_queries_in_cache]
キャッシュに登録されているクエリ数。

[Qcache_total_blocks]
クエリキャッシュの総ブロック数。

●キャッシュのクリア
キャッシュをクリアする場合のコマンドです。
効果測定等をしたい場合に使用します。
「クエリキャッシュから古いデータが返ってくることはないの?」といったように思いますが、データが変更されると、クエリキャッシュに関連するエントリはフラッシュされますので、データは更新されます。

●MySQLサーバーを切断
MySQLサーバーを切断します。

キャッシュはSELECT文にのみ適用されます。
MySQL4.1以前では”SELECT”の前にスペースがあると、クエリキャッシュは有効になりません。

List

関連記事(※当記事と関連性が高いと思われる記事)

MySQLの設定変更

2012/08/04
MySQLの設定変更
スコア:42 ※スコアの数値が大きいほど、関連性の高い記事です。 MySQLの利用状況確認 まず、MySQLの利用状況を確認し、設定変更の目安とします。 MySQLコマンド # MySQLサーバーへログイン mysql -u ユーザー... 続きを読む...

CentOSにPHP5.3をインストール

2012/04/04
CentOSにPHP5.3をインストール
スコア:2 ※スコアの数値が大きいほど、関連性の高い記事です。 以下を前提にインストールするものとします。 CentOS5系でのインストール手順 PHP5.3とMySQLをインストール 基本、デフォルトのリポジトリ経由でインストール... 続きを読む...

よく使うLinuxコマンドの覚え書き

2012/01/29
Linuxコマンド
スコア:2 ※スコアの数値が大きいほど、関連性の高い記事です。 Linuxコマンド ファイル管理 #ディレクトリの移動 cd [ディレクトリ名] 例) cd /home/username usernameディレクトリに移動します。 ... 続きを読む...

WordPressの検索表示をカスタマイズする

2012/03/11
WordPressの検索表示をカスタマイズ
スコア:2 ※スコアの数値が大きいほど、関連性の高い記事です。 以下の手順で紹介していきます。※テキストリンクをクリックすると、その箇所までページがスクロールします。 検索フォームを変更する 検索結果に「入力した検索ワード」と「該当... 続きを読む...

.htaccessでよく使う設定

2011/12/22
.htaccess
スコア:2 ※スコアの数値が大きいほど、関連性の高い記事です。 URLをwww有りかwww無しに統一する WWW有りか無しどちらが良いかは一概に言えませんが、SEOやアクセス解析の観点からいうと、どちらかに統一することは大事です。私... 続きを読む...

おすすめ書籍・商品(※当記事と関連性が高いと思われる書籍・商品)

ページの先頭へ