web-dev-qa-db-ja.com

SQL Serverのアップグレード2008-> 2016/100から130の互換性の遅いクエリ、新しいCEが私を殺す

最近SQL Server 2008から2016にアップグレードされ、互換性モード100で4か月間実行され、すべてが順調に進んでいました(高速)。かなりの量のテストと移行アドバイザーの実行後、「スイッチ」をフリックして互換性レベルを130に変更することにしました...

これは、かなりの数のsprocs/queriesに有害な影響を及ぼしました。スプリット秒で実行されている場合、数分かかる場合があります。また、これによりCPUが増加しています。

これらのクエリは適切に記述されており、インデックスと統計を毎晩再構築しています。

同じように見えるプランを比較すると、数パーセントが少しずれていますが、それでも同じプランです! CEは行数が少ないようです。

また、130でクエリが正常に実行される場合があるのは奇妙なことですが、すべてが良いと思いますが、突然アラートが発生し、クエリが2行だけ異なる年齢で取得された場合、オプション(QUERYTRACEON 9481)を追加して戻す必要があります再びスピーディー。

これらのクエリを以前の栄光に戻すために確認/実行できる他のことはありますか?

すべてのストアドプロシージャプランをキャッシュから削除する必要がありますか?

7
davey

マイクロソフトには、SQL Server 2016の互換モードを変更するための アップグレード戦略 があります。リンクされた記事を引用します。

クエリプロセッサを最新バージョンのコードにアップグレードするための推奨ワークフローは次のとおりです。

  1. データベースの互換性レベルを変更せずにデータベースをSQL Server 2016にアップグレードします(以前のレベルを維持します)

  2. データベースでクエリストアを有効にします。クエリストアの有効化と使用の詳細については、「クエリストアを使用したパフォーマンスの監視」を参照してください。

  3. ワークロードの代表的なデータを収集するのに十分な時間待ちます。

  4. データベースの互換性レベルを130に変更します

  5. SQL Server Management Studioを使用して、互換性レベルの変更後に特定のクエリでパフォーマンスの低下がないかどうかを評価します

  6. 回帰がある場合は、クエリストアに以前の計画を強制します。

  7. 強制に失敗するクエリプランがある場合、またはそれでもパフォーマンスが不十分な場合は、互換性レベルを以前の設定に戻してから、Microsoftカスタマーサポートに連絡することを検討してください。

状況に応じてそのバージョンを試すことができます。互換性モードを100に戻し、クエリストアを有効にし、完全なビジネスサイクルを実行して適切なベースラインを取得します。次に互換性モードを変更し、クエリストアを使用して、実行率の低いクエリを分析し、それらにさらにアクションを実行します。

10
Joe Obbish