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

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

参考記事