MySQLコマンドやSQL文に関する各種メモ書き

MySQLクエリ結果のキャッシュ

MySQLにはクエリキャッシュの機能があり、これをONにするとクエリ結果をキャッシュから読み出すことが出来て高速な動作が期待できる。

1.まず現在クエリキャッシュが有効かどうかを調べる
show variables like 'query_cache_%';
+------------------------------+---------+
| Variable_name                | Value   |
+------------------------------+---------+
| query_cache_limit            | 1048576 | 
| query_cache_min_res_unit     | 4096    | 
| query_cache_size             | 0       | 
| query_cache_type             | ON      | 
| query_cache_wlock_invalidate | OFF     | 
+------------------------------+---------+
5 rows in set (0.00 sec)

【query_cache_size】が【0】なのでクエリキャッシュが有効ではないことがわかる

2.クエリキャッシュを有効にするには

「query_cache_type」をONに、「query_cache_size」を0より大きな適切な値に設定する必要がある。

/etc/my.cnf の [mysqld] の項目にクエリキャッシュに関する記述を追加する

[mysqld]
# (query_cache_limit)これより大きい結果はキャッシュしない
# (query_cache_min_res_unit) 4K が推奨値
# (query_cache_size)クエリキャッシュに割り当てるメモリ(Bytes)
# (query_cache_type) 0:OFF 1:ON 2:DEMAND
query_cache_limit=1M
query_cache_min_res_unit=4k
query_cache_size=24M
query_cache_type=1
3.mysqlをリスタート
/etc/init.d/mysqld restart
(または)service mysqld restart
4. キャッシュ状態を確認する。

SHOW STATUS LIKE 'Qcache%';

でクエリキャッシュの状態を確認する。

mysql> SHOW STATUS LIKE 'Qcache%';
+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Qcache_free_blocks      | 2        | 空きブロック数
| Qcache_free_memory      | 24213616 | 空きメモリのサイズ (バイト)
| Qcache_hits             | 868      | クエリのヒット数 
| Qcache_inserts          | 900      | キャッシュに入れられたクエリの数
| Qcache_lowmem_prunes    | 0        | メモリが足りないために削除された数
| Qcache_not_cached       | 21       | キャッシュに入れられなかったクエリの数
| Qcache_queries_in_cache | 846      | キャッシュ内のクエリの数 
| Qcache_total_blocks     | 1711     | ブロックの領域の合計
+-------------------------+----------+
8 rows in set (0.00 sec)

【Qcache_lowmem_prunes】を注意深く見ればいいことがわかります。

5. キャッシュ

キャッシュは SELECT文にのみ適用される。

MySQL4.1以前を使用している場合 SQL文 の 'SELECT' の前に スペースが入っているとクエリキャッシュが有効にならないので注意。

(MySQL は先頭3文字のみを見て SEL であった場合のみクエリキャッシュに格納します。)



関連エントリー

No.465
03/07 19:14

edit

高速化