現在、異なる仮想マシンを備えた単一のサーバーでホストされている2つのWebサイトがあります。各Webサイトは、IIS 7.5、SQL Server NativeClient2012を使用してMSSQLServer2012DBMSに接続するPHPFastCGI 5.3を備えた独自の仮想マシンでホストされます。SQLServer2012は、両方に関連するデータベースをホストする単一の専用VM上にあります。一部のデータはWebサイト間で共有されているため、Webサイト。
セットアップはWindowsに基づいています。これは、VMで実行する必要のある.NETサービスがほとんどなく、主に分離とセキュリティのためにWebサイトに個別のVMを使用しているためです。
サーバーには、データベースをホストするプライマリストレージとして32GBのRAMと10KRPMSASを備えたIntelXeon 2.4Ghz6コアプロセッサX2が搭載されており、仮想マシンは別の7.2KRPMSASでホストされます。パフォーマンス面では、Webサイトは平均的な負荷で非常に高速です。
ウェブサイトのバックエンドログインがあり、ウェブサイトとその操作に関連するログやその他のものをチェックするために大規模なクエリを実行することがよくあります。平均的なクエリは、非常に大きなレコードセットに対して実行されるため、完了するまでに約1分かかります。クエリが実行されるたびに、そのホストのWebサイトは非常に遅くなります。
問題がSQLServerまたはWebサーバーにあるかどうかを絞り込むために、いくつかのテストを実行しました。まず、データベースサーバーで直接いくつかのバッチクエリを実行しましたが、Webサイトを確認したところ、SQLServerにボトルネックがないことを明確に示すパフォーマンスの問題は見つかりませんでした。次に、この問題の原因がWebサーバーかPHPか、SQLServerネイティブクライアントかを確認しました。サーバーでHTMLテストファイルをホストし、バッチクエリを実行しているときにそのファイルにアクセスしようとしましたが、同じくらい高速であることがわかりました。小さな並べ替えアルゴリズムを備えたプレーンなphpファイルは、Webサイトのバックエンドからバッチクエリが実行されているときに問題なく機能しました。ただし、実際に小さなクエリを使用してデータベース接続をテストした場合、クエリの実行時にロードするのに時間がかかりました。
PHPはMSSQLサーバーではあまり良くないことは知っていますが、開発上の制限のため、今のところMSSQLを使い続ける必要があります。大きなクエリが進行中のときに、SQLServerネイティブクライアントの速度が低下している原因がわかりません。私はいくつかの読書をし、ConnectionPoolingとMultipleActiveResultSetsで遊んでみましたが、現在のシナリオでは何も改善が見られませんでした。Webサイトは非常に遅くなり、データベースに接続する各ページに20秒かかりますが、バックエンドでクエリを実行しないと、わずか1〜2秒で読み込まれます。
これは特定のホストのみに限定されているようです。Webサイト1で重いクエリを実行すると、Webサイト1の他のページは非常に遅くなりますが、Webサイト2ではパフォーマンスの問題はまったく表示されません。ウェブホストとデータベースサーバーの両方でCPU使用率を確認してみました。それらはほんの5-10%多いだけであり、パフォーマンスに関するこのような劇的な問題の原因ではないと私は思います。
これを担当するSQLServerNative Client 2012にバグがある可能性があると思いますか、それとも私が見逃した設定やケースはありますか?
前もって感謝します。