スローダウンが発生しているステートメントベースのレプリケーションサーバーがあり、イベント中にSHOW FULL PROCESSLIST
がレプリケーションクエリが"Waiting for query cache lock"
でスタックしていることを示しました。サーバーquery_cache_size
が0
に設定されているため、これは驚くべきことでした。問題のあるクエリのプロファイリングは、テーブルへのすべての更新でこのステップを示しています。
これは、query_cache_size
が0
であっても、更新のプロファイルに表示されるのは一般的ですか?これは本当にクエリキャッシュのチェックであり、クエリは真のロックを取得するために待機しているのではありませんか?
このメッセージは、 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;
試してみる !!!