1
2つのサーバーでのMySQLのパフォーマンスの大きな違い
MySQLサーバーをテストサーバーと本番サーバーの2つの異なるマシンにインストールしました。どちらもWindowsであり、ウェブアプリケーションで使用されます。 問題は、いくつかのクエリを実行すると、2つのマシン間でパフォーマンスが大幅に異なることです(本番サーバーの方が低速です)。両方のサーバーのMySQLバージョンは同じです。構成ファイルも同じです(唯一の違いは、データのパスと、運用サーバーがエラー以外のログを記録しないことです)。私が話しているパフォーマンスの違いは3桁または4桁大きくなっています(たとえば、テストサーバーでのクエリは0.2秒で実行されますが、運用サーバーでは84秒で実行されます)。 問題のクエリは、 "WHERE [...] IN [...]"を含む句を多用しています。これは、通常非常に遅く、JOINに置き換える必要があることを理解しています。ただし、使用しているMySQLのバージョンは5.6.19であり、これらのクエリは自動的に最適化されます。そのため、テストサーバーではクエリが高速に実行されます(変更できないプログラムの一部であるため、手動で最適化することはできません)とにかく)。 先ほど述べたように、MySQLのインストールと構成は同じであるため、問題がどこにあるのかはまったくわかりません。一方では、プログラムとDBが同じであるため、なんらかの構成上の問題である必要があると思いますが、一方で、構成が同一であるため、これは意味がありません。 サーバー上のデータ: テストサーバー: Intel Core 2 Quad Q9400 @ 2.66GHz 8GB RAM Windows Server 2008 R2スタンダード 本番サーバー: Intel Xeon E5530 @ 2.40GHz 5GB RAM Windows Server 2012 R2スタンダード 編集:重要なことを言うのを忘れていました。「問題の」クエリとは別に「WHERE ... IN」句を使用するクエリが実行されています。これらは両方のマシンで高速に実行され、MySQLによって正しく最適化されていることを示唆しています。他のクエリが最適化されていないときに最適化されているクエリがあるのは不思議です。これが実際の問題であるかどうかは不明です。 編集#2:両方のサーバーの構成ファイルは次のとおりです:http : //pastebin.ca/2834906 編集#3:遅いクエリの1つ のEXPLAINは次のとおりです。https://mariadb.org/ea/v36zj EXPLAINは、テストと製品の両方でまったく同じです。クエリ自体はこちらです:http : //pastebin.com/VXgBxXmtこれはオートフォーマッタでフォーマットされているため、あまり明確ではありません。ご覧のとおり、は非常に長く複雑です。これは手動で生成されたものではなく、いくつかの機能を備えた標準SQLの方言を使用するソフトウェアによってさらに自動的に生成されます。 また、詳細情報:本番サーバーのデータを減らし、使用されないDBの古いデータのほとんどを削除することで、一時的に問題にパッチを適用しました。もちろん古いデータも必要なので、これは解決策ではありません。将来的には問題になるでしょう。DBはそれほど大きくありません。完全なDBは1308MBで、現在生産中の縮小バージョンは332MBです。 更新:解決しましたか? 私は問題を解決したと思います。本番サーバーが実際に使用されているため、まだテストしていませんが、考えられる問題は、182Mに設定されたパラメーター "innodb_buffer_pool_size"でした。実際には、構成ファイルの行は次を示しています:innodb_buffer_pool_size …