MySQL

MySQL クエリキャッシュ値設定と確認方法

More than 1 year has passed since last update.

phpMyAdmin状態を見るのが良いです。

色々なサイトから情報をいただきました。

キャッシュヒット率(下にも書いています)
hits / (hits + inserts + not_cached) * 100

参考

クエリキャッシュ設定

my.cnf
# クエリキャッシュ最大サイズ(デフォルト1M)
query_cache_limit=1M

# クエリキャッシュで使用するメモリサイズ。
# 一般的なルールとして、FLUSH QUERY CACHE に長い時間がかかるようであれば大きすぎます。
query_cache_size=32M

# クエリキャッシュのタイプ
# (0:off, 1:ON SELECT SQL_NO_CACHE以外, 2:DEMAND SELECT SQL_CACHEのみ)
query_cache_type=1

現在のクエリキャッシュ設定値

mysql> SHOW VARIABLES LIKE '%query_cache%';
+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| have_query_cache             | YES      | --キャッシュクエリを使用可能か
| query_cache_limit            | 1048576  | --クエリキャッシュ最大サイズ(1MB)
| query_cache_size             | 33554432 | --クエリキャッシュ領域。(32MB)
| query_cache_type             | ON       | --クエリをキャッシュする(SELECT SQL_NO_CACHE以外)
| query_cache_wlock_invalidate | OFF      | --書込みロック獲得時に、ロックしたテーブルに関するクエリキャッシュを無効にするか
+------------------------------+----------+
5 rows in set (0.00 sec)

現在のクエリキャッシュの利用状況

クエリキャッシュ
mysql> SHOW STATUS LIKE 'Qcache%';
+-------------------------+------------+
| Variable_name           | Value      |
+-------------------------+------------+
| Qcache_free_blocks      | 2108       | --空きメモリーブロックの数。起動時は1。1だと良い。それ以上だと断片化しているためFLUSH QUERY CACHEにてキャッシュのデフラグも検討。
| Qcache_free_memory      | 6830336    | --クエリーキャッシュ用の空きメモリーの量
| Qcache_hits             | 3810442057 | --クエリーキャッシュヒットの数。
| Qcache_inserts          | 397612602  | --クエリーキャッシュに追加されるクエリーの数
| Qcache_lowmem_prunes    | 307230686  | --メモリーが少ないためクエリーキャッシュから削除されたクエリーの数
| Qcache_not_cached       | 151054542  | --非キャッシュクエリーの数 (キャッシュできないか、query_cache_type 設定のためキャッシュされない)
| Qcache_queries_in_cache | 8044       | --クエリーキャッシュ内に登録されたクエリーの数
| Qcache_total_blocks     | 26009      | --クエリーキャッシュ内のブロックの合計数
+-------------------------+------------+
8 rows in set (0.00 sec)
キャッシュヒット率
Qcache_hits / (Qcache_hits + Qcache_inserts + Qcache_not_cached) * 100

起動してからこれまでの最大同時接続数 確認

mysql> SHOW STATUS LIKE '%connect%';
+----------------------+------------+
| Variable_name        | Value      |
+----------------------+------------+
| Aborted_connects     | 1          |
| Connections          | 1747049786 |--起動してからの累積接続数
| Max_used_connections | 323        |--起動してからこれまでの最大同時接続数
| Threads_connected    | 1          |--現在の接続数
+----------------------+------------+
4 rows in set (0.00 sec)

table_cache

mysql> SHOW STATUS LIKE 'open%tables';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| Open_tables   | 1024   | --table_cache値で指定した分キャッシュされる。
| Opened_tables | 489028 |
+---------------+--------+
2 rows in set (0.00 sec)
mysql> flush tables;
Query OK, 0 rows affected (0.00 sec)

mysql> show open tables;
Empty set (0.00 sec)