ホームページ >データベース >mysql チュートリアル >MySQL キャッシュの起動メソッドとパラメータ (query_cache_size) を分析する

MySQL キャッシュの起動メソッドとパラメータ (query_cache_size) を分析する

怪我咯
怪我咯オリジナル
2017-04-01 09:59:321770ブラウズ

MySQL クエリ キャッシュ はバージョン 4.1 から利用可能ですが、今すぐ勉強する価値があります。デフォルト設定では、MySQL のこの機能は有効になっていません。 '%query_cache%'; などの show 変数を使用すると、変数 have_query_cache の値が Yes であることがわかります。これは querycache が有効であることを意味しますが、これは実際には間違っています。このパラメータは、MYSQL の現在のバージョンがクエリ キャッシュをサポートしているかどうかを示します。実際、クエリ キャッシュが有効かどうかは、別のパラメータの値に依存します: query_cache_size。これは 0. で、クエリ キャッシュが無効になっていることを示し、デフォルト設定は 0.

設定方法:


MYSQLの
設定ファイル
my.iniまたはmy.cnfで次のコンテンツを見つけます: # クエリキャッシュは、SELECT結果をキャッシュし、後でそれらを返すために使用されます

#クエリ

# に同じクエリが多数あり、テーブルがほとんど変更されない場合、クエリ
# キャッシュを有効にすると、速度が大幅に向上する可能性があります。

# “Qcache_lowmem_prunes” ステータス変数を参照してください。現在の値

#は、負荷に対して十分な高さです。

# 注: テーブルが頻繁に変更される場合、またはクエリが毎回テキスト的に異なる場合

# では、クエリ キャッシュにより、代わりに

# 速度が低下する可能性があります。パフォーマンスの向上。
query_cache_size=0

上記の情報はデフォルト設定であり、その
コメント
は、MYSQL のクエリ キャッシュが選択クエリの結果をキャッシュするために使用され、次回同じクエリ リクエストが実行されたときに実行されないことを意味します。実際のクエリ処理では、結果が直接返されます。このようなクエリ キャッシュにより、クエリの速度が向上し、クエリのパフォーマンスが最適化されます。その前提条件は、同じクエリまたは類似したクエリが多数存在し、データがほとんど変更されないことです。テーブルを使用する場合は、この機能を使用する必要はありません。 Qcache_lowmem_prunes 変数の値を通じて、現在の値が現在のシステム負荷を満たしているかどうかを確認できます。注: クエリを実行するテーブルが頻繁に更新され、同じクエリがほとんどない場合は、クエリ キャッシュを使用しないことをお勧めします。
具体的な設定方法: 1. query_cache_size を特定のサイズに設定します。具体的なサイズはクエリの実際の状況によって異なりますが、基準値 32M で 1024 の倍数に設定するのが最善です。
2.行を追加します: query_cache_type=1

query_cache_type パラメーターは、キャッシュのタイプを制御するために使用されます。この値は、任意に設定することはできず、数値に設定する必要があることに注意してください。



If 0 に設定すると、キャッシュはまったく役に立たず、無効になっていると同等になります。しかしこの場合、システムは query_cache_size で設定されたサイズを割り当てる必要があるのでしょうか? この質問はテストする必要がありますか?

1 に設定すると、select ステートメントで SQL_NO_CACHE を使用してクエリ キャッシュを無効にしない限り、すべての結果がキャッシュされます。 MySQL キャッシュの起動メソッドとパラメータ (query_cache_size) を分析する
2 に設定すると、select ステートメントの SQL_CACHE を通じてキャッシュする必要があるクエリのみがキャッシュされます。

OK、構成後のファイルの一部は次のとおりです:

query_cache_size=128M

query_cache_type=1
ファイルを保存し、MYSQL サービスを再起動し、次のクエリを通じて本当に有効かどうかを確認します:


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             | 134217728 |

| query_cache_type             | ON        |

| query_cache_wlock_invalidate | OFF       |

+——————————+———–+

6 rows in set (0.00 sec)


主に、query_cache_size と query_cache_type の値は設定したものと一致していますか:

ここでの query_cache_size の値は 134217728 で、実際には同じですが、単位が異なります。自分で変換できます: 134217728 = 128*1024*1024。

query_cache_type は 1 に設定され、ON として表示されます。これについては前述しました。

つまり、上記の表示は設定が正しいことを示していますが、実際のクエリでクエリをキャッシュできるかどうかは、「%Qcache%」ステートメントのような show status を通じてテストする必要があります。これでクエリ キャッシュ機能が有効になりました。クエリを実行する前に、まず関連するパラメータの値を見てみましょう:


mysql> show status like ‘%Qcache%';

+————————-+———–+

| Variable_name           | Value     |

+————————-+———–+

| Qcache_free_blocks      | 1         |

| Qcache_free_memory      | 134208800 |

| Qcache_hits             | 0         |

| Qcache_inserts          | 0         |

| Qcache_lowmem_prunes    | 0         |

| Qcache_not_cached       | 2         |

| Qcache_queries_in_cache | 0         |

| Qcache_total_blocks     | 1         |

+————————-+———–+

8 rows in set (0.00 sec)


这里顺便解释下这个几个参数的作用:

Qcache_free_blocks:表示查询缓存中目前还有多少剩余的blocks,如果该值显示较大,则说明查询缓存中的内存碎片过多了,可能在一定的时间进行整理。

Qcache_free_memory:查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,DBA可以根据实际情况做出调整。

Qcache_hits:表示有多少次命中缓存。我们主要可以通过该值来验证我们的查询缓存的效果。数字越大,缓存效果越理想。

Qcache_inserts: 表示多少次未命中然后插入,意思是新来的SQL请求在缓存中未找到,不得不执行查询处理,执行查询处理后把结果insert到查询缓存中。这样的情况的次数,次数越多,表示查询缓存应用到的比较少,效果也就不理想。当然系统刚启动后,查询缓存是空的,这很正常。

Qcache_lowmem_prunes:该参数记录有多少条查询因为内存不足而被移除出查询缓存。通过这个值,用户可以适当的调整缓存大小。

Qcache_not_cached: 表示因为query_cache_type的设置而没有被缓存的查询数量。

Qcache_queries_in_cache:当前缓存中缓存的查询数量。

Qcache_total_blocks:当前缓存的block数量。
下边我们测试下:

比如执行如下查询语句

mysql> select * from user where id = 2;

+—-+——-+

| id | name  |

+—-+——-+

|  2 | test2 |

+—-+——-+

1 row in set (0.02 sec)


然后执行show status like ‘%Qcache%',看看有什么变化:

mysql> show status like ‘%Qcache%';

+————————-+———–+

| Variable_name           | Value     |

+————————-+———–+

| Qcache_free_blocks      | 1         |

| Qcache_free_memory      | 134207264 |

| Qcache_hits             | 0         |

| Qcache_inserts          | 1         |

| Qcache_lowmem_prunes    | 0         |

| Qcache_not_cached       | 3         |

| Qcache_queries_in_cache | 1         |

| Qcache_total_blocks     | 4         |

+————————-+———–+

8 rows in set (0.00 sec)


对比前面的参数值,我们发现Qcache_inserts变化了。Qcache_hits没有变,下边我们在执行同样的查询

select * from user where id = 2,按照前面的理论分析:Qcache_hits应该等于1,而Qcache_inserts应该值不变(其他参数的值变化暂时不关注,读者可以自行测试),再次执行:
show status like ‘%Qcache%',看看有什么变化:

mysql> show status like ‘%Qcache%';

+————————-+———–+

| Variable_name           | Value     |

+————————-+———–+

| Qcache_free_blocks      | 1         |

| Qcache_free_memory      | 134207264 |

| Qcache_hits             | 1         |

| Qcache_inserts          | 1         |

| Qcache_lowmem_prunes    | 0         |

| Qcache_not_cached       | 4         |

| Qcache_queries_in_cache | 1         |

| Qcache_total_blocks     | 4         |

+————————-+———–+

8 rows in set (0.00 sec)


OK,果然跟我们分析的完全一致。



以上がMySQL キャッシュの起動メソッドとパラメータ (query_cache_size) を分析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。