プロジェクトのクエリキャッシュで多くの問題が発生しています。ローカル開発マシンと本番サーバーの両方で同じバージョンのMySQLのPerconaフレーバーを実行しています。これで、クエリキャッシュを有効にすると、ローカルマシンで優れた結果が得られます。キャッシュする必要のあるほとんどすべてのクエリは、事実上キャッシュされます。
現在、まったく同じクエリが本番サーバーにキャッシュされていません。すべてがまったく同じです。mysql変数、データベースコンテンツ、コードベース、ログインユーザー、..しかし、本番環境では、ほんの一握りのクエリのみがキャッシュされ、最も重要なクエリはすべてスキップされます。そして、私は理由を理解することはできません:-)
したがって、解決策を探して、トピックテーブルから最新の3つのトピックを選択するために使用される次のクエリを使用しています(これは最も「重い」クエリであり、絶対にキャッシュしたいクエリです!)
SELECT `topic`.* FROM `topics` AS `topic`
LEFT OUTER JOIN `topics` AS `topic_helper`
ON (`topic`.`id` = `topic_helper`.`id`
AND `topic_helper`.`created_on` < `topic`.`created_on`)
GROUP BY `topic`.`id` HAVING COUNT(*) < 3
ORDER BY `topic`.`created_on` DESC;
それで、最初に、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_strip_comments | OFF |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
+------------------------------+----------+
上記のクエリを実行すると、最初の実行後にローカルにキャッシュされますSHOW PROFILE
。これは、トレースの終わり近くにあることを明確に示しています。
| Waiting for query cache lock | 0.000001 |
| Waiting on query cache mutex | 0.000001 |
| freeing items | 0.000000 |
| storing result in query cache | 0.000002 |
| logging slow query | 0.000001 |
| cleaning up | 0.000006 |
+--------------------------------+----------+
2番目の呼び出しは、期待どおりにキャッシュからクエリを返します。
本番サーバーでは、このクエリを実行してもキャッシュに保存されることはありません。結果セットはまったく同じであり、クエリキャッシュを無効にするステートメントが使用されていないことは明らかです(http://dev.mysql.com/doc/refman/5.1/en/query-cache-operationのマニュアルによると) .html-上記のクエリは、キャッシュするための要件に準拠していると確信しています。)
完全を期すためSHOW PROFILE
に、本番サーバーでの同じクエリの完全な出力は、ここに貼り付けられます:http: //pastebin.com/7Jm5rmVd
また、構成は両方のサーバーでまったく同じですが、私のローカルバージョンは5.5.27であり、本番5.5.17-55のものよりもわずかに新しいことに注意してください。これが問題なのかもしれません..?
ローカルサーバーと本番サーバーの両方からの完全な出力を比較して、SHOW VARIABLES;
不足しているものがないかどうかを確認しましたが、システムのタイムゾーンとログファイルへのパスなどを除いて何も変わりません。
では、次にどこを探すべきか知っている人はいますか?または、これを引き起こしている可能性のある手がかりはありますか?