最近、サーバーをSQL Server 2008R2からSQL Server 2014にアップグレードしました。2008R2で正常に実行されたクエリがありますが、2014年には実行速度が非常に遅くなり、実行計画が不良です。
私はいくつかのテストを行いました...
これらの両方により、クエリはSQL Server 2008R2と同じように高速に実行されました。
SQL Server 2014で計画がなぜそれほどひどく、クエリが長く実行されるのですか?
この画像は2つのクエリを示しています。1つは2008R2での実行方法と同じように行番号を使用し、2つ目は改ページ調整を使用した修正です。どちらも2014年に実行されましたが、どちらも非常に異なりますが、2008年には、2014年に改ページ調整を使用した場合と同じパフォーマンスが得られます。
これは問題ではなく、仕様によるものであり、パフォーマンスの向上と見なされます。
クエリが期待どおりに実行されない場合は、データベース/アプリケーションのコードでこれに対処する必要があります。
(OPTION (QUERYTRACEON 9481)
を使用して)サーバー、セッション、またはクエリレベルでトレースフラグ9481を使用すると、古いカーナリティ推定を強制できます。これにより、データベースの互換性レベルに関係なく強制されます。
CSSチームがここに投稿した の情報もたくさんあります。
Cardanility Estimatorと変更に関するより詳細な投稿 SQL Server 2014でのそのプロセスについての例が含まれています。