MS SQL Server 2014を2016年に実行される別のサーバーに移行することにしました。このデータベースを使用するPHPアプリケーションのパフォーマンスが大幅に低下しました(クエリは1 2秒〜20秒)ですが、スキーマ、構造、データに関してDBは同じです。新しいサーバーのCPU、ディスク、およびメモリのパラメータが高くなっており、作業負荷は通常のものなので、このパフォーマンスの低下は最初は意味がありませんでした。 次に、Profilerでいくつかのクエリを分析したところ、Management Studio(高速、1〜3秒)またはアプリケーションフロントエンド(遅い、15〜25秒)のいずれかでクエリプランが異なることに驚きました。 。 私はこれを見つけましたlinkとthisでも、多くを読んでいて別のものを試してみたら、問題を解決できません。誰もこれを前に扱っていますか?深く潜る前に確認すべき素早いものについてのヒント?MSSQLの高速クエリですが、PHPの方が遅い
ありがとうございます!
============
EDIT 1
クエリは、フィルタの値に応じて、わずか数レコードを返しますが、より何か10および1000(決してよりそれは1000を上回っているからです)。 照会されているメインテーブルには100万レコードが含まれていますが、DB全体の重量は約4 GBです。 インデックスが正常に移行された後、再構築および統計が更新されました。私が試したもののうち
EDIT 2
は、すべてのDBのインデックスを再構築し、すべてのDBテーブルの統計情報を更新しています。私はRECOMPILEも数回強制しました(Management Studioのみ)。インデックスヒントを使用して一部のインデックスを強制的に使用しました(Management Studioのみ)。 これらのどれも問題を解決できませんでした。 クエリプランについては、クエリが約20のテーブルに加わり、いくつかのサブクエリがあるため、分析が非常に難しいです。
EDIT 3
だけ明確にする、さまざまな実行計画を生成し、クエリでもパラメータと同一です。つまり、プロファイラトレースがアクティブな間にフロントエンドからクエリを実行し、クエリがキャプチャされます(約20秒かかります)、テキストをコピーして管理スタジオに貼り付け、同じクエリを実行して結果を取得しますちょうど2秒と、別の実行計画です。この種の問題は、依然としてパラメータスニッフィングと関連していますか?
uh、データはどのように見えますか(何百から何千億? ?もしあなたがたくさんのデータを取得してPHPで処理したら、それは遅いです。 –
多くの行を照会する場合は、数秒で行数十億を返す** In-Memory OLTP **を試してください。 https://channel9.msdn.com/Shows/Data-Exposed/SQL-Server-2016-In-memory-OLTP –
試したさまざまなことは何ですか? – GuidoG