web-dev-qa-db-ja.com

クエリプロファイリングに「クエリキャッシュロックの待機中」と表示されるが、query_cache_sizeが0である

スローダウンが発生しているステートメントベースのレプリケーションサーバーがあり、イベント中にSHOW FULL PROCESSLISTがレプリケーションクエリが"Waiting for query cache lock"でスタックしていることを示しました。サーバーquery_cache_size0に設定されているため、これは驚くべきことでした。問題のあるクエリのプロファイリングは、テーブルへのすべての更新でこのステップを示しています。

これは、query_cache_size0であっても、更新のプロファイルに表示されるのは一般的ですか?これは本当にクエリキャッシュのチェックであり、クエリは真のロックを取得するために待機しているのではありませんか?

6
John Donahue

このメッセージは、 query_cache_size が0であっても、クエリキャッシュミューテックスを取得しようとしていることを意味します( 注MySQLがOracleでもこれを許可しているとakuzminskyが述べたquery_cache_type も0に設定する必要がありますMySQLドキュメントが言うように:

query_cache_type を0に設定してサーバーを起動すると、クエリキャッシュミューテックスがまったく取得されません。つまり、クエリキャッシュは実行時に有効にできず、クエリ実行のオーバーヘッドが削減されます。

MySQL 5.6では、 query_cache_type はデフォルトで0です。 MySQLの場合は1です 5.5.1 、および 5.5

MySQLのバージョンに関係なく、my.cnfにはこれらがあります

[mysqld]
query_cache_size = 0
query_cache_type = 0

Mysqlを再起動する必要はありません。 mysqlにログインして、以下を実行するだけです。

mysql> SET GLOBAL query_cache_size = 0;
mysql> SET GLOBAL query_cache_type = 0;

試してみる !!!

8
RolandoMySQLDBA