クエリキャッシュを有効にする
my.cnf
にこれを設定してreload(サイズは環境に合わせる)
[mysqld]
query_cache_limit = 2MB
query_cache_min_res_unit=4k
query_cache_size = 64MB
query_cache_type = 1
クエリキャッシュ設定の確認
MariaDB [(none)]> show variables like '%query_cache%';
+------------------------------+----------+
| Variable_name | Value |
+------------------------------+----------+
| have_query_cache | YES |
| query_cache_limit | 2097152 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 67108864 |
| query_cache_strip_comments | OFF |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
+------------------------------+----------+
7 rows in set (0.01 sec)
確認するところ
- have_query_cache が YES
- query_cache_type が ON
- query_cache_size が 0より大きい
クエリキャッシュ使用状況の確認
MariaDB [(none)]> show global status like '%Qcache%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 5 |
| Qcache_free_memory | 64574304 |
| Qcache_hits | 30267 |
| Qcache_inserts | 1235 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 49425 |
| Qcache_queries_in_cache | 792 |
| Qcache_total_blocks | 1771 |
+-------------------------+----------+
確認するところ
- Qcache_hits キャッシュが使われた数
- Qcache_not_cached キャッシュが使われなかった数
クエリキャッシュは、更新がかかる毎にリセットされるので(テーブル毎)、更新が頻繁に行われるテーブルにはあまり効果は現れない
ここまではよかった
しかし、設定を終えても一向にQcache_hitsが増えない
別のサーバに設定してみると、設定した途端ズンドコ増える
調べまわった結果、こちらの記事に助けられました
DB名にハイフンがあるとクエリキャッシュは使われない
確かに、クエリキャッシュが使われないサーバのDB名は、foo-bar
といったDB名で、ハイフンがあった
これをハイフンを消して、foobar
としてDBを作りなおしてみた所、すんなりキャッシュが使われるようになった