Mysqlクエリーキャッシュ

3551 ワード

Mysqlクエリーキャッシュ
クエリー・キャッシュの役割は、クエリーが以前と同じクエリーを受信すると、サーバが前回のクエリーを再分析して実行するのではなく、クエリー・キャッシュ・タイプから結果を取得することです.これにより、パフォーマンスが大幅に向上し、時間を節約できます.
1.クエリー・キャッシュの構成
プロファイルの変更[mysqld]でのquery_の変更cache_sizeとquery_cache_type(ない場合は追加).ここでquery_cache_sizeはキャッシュのサイズを表し、query_cache_typeには3つの値があり、その種類のselect結果セットをキャッシュすることを示し、query_cache_typeの各値は次のとおりです.
0またはoffでキャッシュを閉じる
1またはonはキャッシュをオンにしますが、sql_は保存されません.no_Cacheのselect文、例えばselect sqlをキャッシュしないno_cache name from wei where id=2
2またはdemandは条件付きキャッシュを開き、sqlのみをキャッシュします.Cacheのselect文、キャッシュselect sql_cache name from wei where id=4
例の構成は、Mysqlサーバの再起動を完了するように構成すればよい.
query_cache_size=10M
query_cache_type=1

開いているかどうかを確認するには、次のコマンドを使用します.have_query_Cacheがオンになっているかどうか、query_cache_limitは、デフォルトで1 Mの単一クエリーで使用できるバッファサイズを指定します.query_cache_min_res_unitはシステムに割り当てられた最小キャッシュブロックサイズで、デフォルトは4 KBで、設定値が大きいとビッグデータクエリーにメリットがありますが、クエリーが小さなデータクエリーであれば、メモリの破片と浪費を招きやすいです.query_cache_sizeとquery_cache_typeは上の私たちの構成です.query_cache_wlock_invalidateは、他のクライアントがMyISAMテーブルを書き込み中である場合、query cacheにクエリがある場合、cache結果を返すか、書き込み操作が完了してからテーブルを読み返して結果を取得するかを示す.
mysql> show variables like '%query_cache%';
+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| have_query_cache             | YES      |
| query_cache_limit            | 1048576  |
| query_cache_min_res_unit     | 4096     |
| query_cache_size             | 10485760 |
| query_cache_type             | ON       |
| query_cache_wlock_invalidate | OFF      |
+------------------------------+----------+
6 rows in set (0.00 sec)

2.テスト
まず、select count(*)from weiを実行します.次にもう一度実行すると、キャッシュからselect結果が2回目に読み込まれたため、2回目の実行時間が1回目の実行よりはるかに低いことがわかります.
mysql> select  count(*) from wei ;
+----------+
| count(*) |
+----------+
|  4194304 |
+----------+
1 row in set (3.92 sec)

mysql> select  count(*) from wei ;
+----------+
| count(*) |
+----------+
|  4194304 |
+----------+
1 row in set (0.00 sec)

現在キャッシュされている状況を次のコマンドで確認できます.
mysql> show status like 'qcache%';
+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Qcache_free_blocks      | 1        |
| Qcache_free_memory      | 10475424 |
| Qcache_hits             | 1        |
| Qcache_inserts          | 1        |
| Qcache_lowmem_prunes    | 0        |
| Qcache_not_cached       | 0        |
| Qcache_queries_in_cache | 1        |
| Qcache_total_blocks     | 4        |
+-------------------------+----------+
8 rows in set (0.00 sec)

各パラメータの意味は次のとおりです.
Qcache_free_blocks:キャッシュ内の隣接するメモリブロックの数.数が多いと破片がある可能性があります.FLUSH QUERY CACHEでは、キャッシュ内のフラグメントが整理され、空きブロックが得られます.
Qcache_free_memory:キャッシュ内の空きメモリ.
Qcache_hits:クエリーがキャッシュにヒットするたびに増大
Qcache_inserts:クエリーを挿入するたびに大きくなります.ヒット回数を挿入回数で割ると不的中率になります.
Qcache_lowmem_prunes:キャッシュにメモリ不足が発生し、より多くのクエリーにスペースを提供するためにクリーンアップする必要がある回数.この数字は長い間見たほうがいい.この数字が増加している場合は、破片が非常に深刻であるか、メモリが少ない可能性があります.(上のfree_blocksとfree_memoryはどの状況に属しているかを教えてくれます)
Qcache_not_Cached:キャッシュに適さないクエリの数は、通常、これらのクエリがSELECT文ではないか、now()などの関数を使用しているためです.
Qcache_queries_in_Cache:現在キャッシュされているクエリー(および応答)の数.
Qcache_total_blocks:キャッシュ内のブロックの数.