web-dev-qa-db-ja.com

互換性レベルを80から100に変更

SQLサーバー2008r2(Standardエディション)から2016 Standardエディションサーバーにすべてのデータベースを移動しようとしています。

多くのデータベースの互換性レベルは80に設定されていますが、2016サーバーではサポートされていません。私たちの計画では、すべてのデータベースをレベル100に変更し、いくつかのテストを実行してから、データベースを新しいサーバーに移動します。

私の質問は次のとおりです。

  1. 後のパフォーマンスの違いを期待する必要があります
    互換性レベルの変更?

  2. 前後のパフォーマンスを測定する最良の方法は何ですか?

  3. データベースをSQLに移動するとき、特別な注意を払う必要がありますか
    サーバー2016?

1
nunopacheco

SQL Server 2012以下とSQL Server 2014以降の主な違いは、 新しいカーディナリティエスティメータ(CE)です

ここで私の答え も参照してください。

My Story

SQL Server 2008R2から2014に移行したとき、アプリケーションでクエリの大きなリグレッションが発生していることがわかりました。したがって、TF 9481を有効にすることを決定しましたが、最新の互換性レベルがまだあります。

SQL Server 2014から2016にアップグレードしたところ、クエリのリグレッションはありませんでした。したがって、SQL Server 2016ではTraceflagまたは古い互換モードは必要ありません。

SQL Server 2016には、CEおよびオプティマイザの修正を管理するためのデータベーススコープ構成オプションがあります(TF 4199に相当)

enter image description here

互換性レベルの変更後、パフォーマンスの違いを期待できますか?

これはアプリケーションにとって大きな変化です。 SO正しくテストします。 Database Experimentation Assistant を使用できます(新規&プレビュー中)

パフォーマンスの前後を測定する最良の方法は何ですか?

クエリストア(SQL Server 2016の新機能) を使用してパフォーマンスを測定し、IO、CPUなどの簡単にリグレッションされたクエリを見つけることができます。

データベースをSQL Server 2016に移動するときは、特別な注意が必要ですか?

私は SQLサーバーの下位バージョンから上位バージョンのSQLサーバー に移行するための長い答えを書いています。

1
Kin Shah

Books Online ごとに、互換性レベルは特定のデータベースの動作を、指定されたバージョンのSQL Serverと互換性があるように設定します。そのため、一部のクエリは機能しなくなったり、わずかに変更する必要がある場合があります。これらmayは、特にレベル120以上に移動すると、クエリオプティマイザがどのように変化するかによってパフォーマンスに関連します。動作します。アップグレード前に互換性レベルを変更しない場合、アップグレードプロセスは新しいインストールで最低レベルの互換性、この場合は100にアップグレードします。移行前に最初に互換性を変更する利点は、クエリに変更が必要かどうかを確認することです(アプリケーションを想定)このデータベースに添付されています)。

これは移行であるため、パフォーマンスをテストする1つの方法は、データベースを2016サーバーに移行し、両方で同じクエリを実行して、それらからメトリックを収集して比較することです。ただし、クエリがまだ実行可能であると仮定すると、同じサーバーでのパフォーマンスは同様であるはずです。互換モードを変更すると実行されなくなるクエリの例は次のとおりです。

SELECT table1.column1
    , table2.column2
FROM table1,table2
WHERE table1.column1 *= table2.column1
0