最近SQL Server 2008から2016にアップグレードされ、互換性モード100で4か月間実行され、すべてが順調に進んでいました(高速)。かなりの量のテストと移行アドバイザーの実行後、「スイッチ」をフリックして互換性レベルを130に変更することにしました...
これは、かなりの数のsprocs/queriesに有害な影響を及ぼしました。スプリット秒で実行されている場合、数分かかる場合があります。また、これによりCPUが増加しています。
これらのクエリは適切に記述されており、インデックスと統計を毎晩再構築しています。
同じように見えるプランを比較すると、数パーセントが少しずれていますが、それでも同じプランです! CEは行数が少ないようです。
また、130でクエリが正常に実行される場合があるのは奇妙なことですが、すべてが良いと思いますが、突然アラートが発生し、クエリが2行だけ異なる年齢で取得された場合、オプション(QUERYTRACEON 9481)を追加して戻す必要があります再びスピーディー。
これらのクエリを以前の栄光に戻すために確認/実行できる他のことはありますか?
すべてのストアドプロシージャプランをキャッシュから削除する必要がありますか?
マイクロソフトには、SQL Server 2016の互換モードを変更するための アップグレード戦略 があります。リンクされた記事を引用します。
クエリプロセッサを最新バージョンのコードにアップグレードするための推奨ワークフローは次のとおりです。
データベースの互換性レベルを変更せずにデータベースをSQL Server 2016にアップグレードします(以前のレベルを維持します)
データベースでクエリストアを有効にします。クエリストアの有効化と使用の詳細については、「クエリストアを使用したパフォーマンスの監視」を参照してください。
ワークロードの代表的なデータを収集するのに十分な時間待ちます。
データベースの互換性レベルを130に変更します
SQL Server Management Studioを使用して、互換性レベルの変更後に特定のクエリでパフォーマンスの低下がないかどうかを評価します
回帰がある場合は、クエリストアに以前の計画を強制します。
強制に失敗するクエリプランがある場合、またはそれでもパフォーマンスが不十分な場合は、互換性レベルを以前の設定に戻してから、Microsoftカスタマーサポートに連絡することを検討してください。
状況に応じてそのバージョンを試すことができます。互換性モードを100に戻し、クエリストアを有効にし、完全なビジネスサイクルを実行して適切なベースラインを取得します。次に互換性モードを変更し、クエリストアを使用して、実行率の低いクエリを分析し、それらにさらにアクションを実行します。