クエリキャッシュを有効にする
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を作りなおしてみた所、すんなりキャッシュが使われるようになった