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

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

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


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

## 参考

* [MySQL Cache メモ - Qiita](http://qiita.com/a_yasui/items/e6aa570118d4dae67276)
* [MySQLパフォーマンスチューニング -クエリキャッシュ適用状況の確認- - Qiita](http://qiita.com/mamy1326/items/d1548d8cf4528277172a)
* [MySQL クエリキャッシュの概要と導入・評価方法 | WEB ARCH LABO](https://weblabo.oscasierra.net/mysql-query-cache/)
* [LAMP システムを調整する: 第 3 回 MySQL サーバーを調整する](https://www.ibm.com/developerworks/jp/linux/library/l-tune-lamp-3.html)

## クエリキャッシュ設定

```rb: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
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:クエリキャッシュ
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)
```

```rb:キャッシュヒット率
Qcache_hits / (Qcache_hits + Qcache_inserts + Qcache_not_cached) * 100
```

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

```mysql
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:
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
mysql> flush tables;
Query OK, 0 rows affected (0.00 sec)

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