適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
互換性証明書を利用すると、企業はオンプレミス、クラウド、エッジに置いている SQL Server データベースをアップグレードし、最新化し、アプリケーションの互換性リスクをなくすことができます。
同じデータベース エンジンが SQL Server と Azure SQL Database (Azure SQL Managed Instance を含む) の両方を支援します。 このようにデータベース エンジンが共有されることで、ユーザー データベースをオンプレミスの SQL Server と Azure SQL Database の間でシームレスに移動できて、かつ、Transact-SQL としてデータベースで実行されるアプリケーション コードはそのソース システムで実行される場合と同様に機能します。
SQL Server が新しくリリースされるたびに、既定の互換性レベルが データベース エンジン のバージョンに設定されます。 ただし、以前のバージョンの互換性レベルが維持され、既存のアプリケーションの互換性が残ります。 この互換性マトリックスはこちらで確認できます。 そのため、特定の SQL Server バージョンで動作することが認定されているアプリケーションは、実際にはそのバージョンの既定の互換性レベルで動作することが認定されていました。
たとえば、データベース互換性レベル 130 は SQL Server 2016 (13.x) の既定でした。 互換性レベルは Transact-SQL の特定の機能およびクエリ最適化動作を強制するものであるため、SQL Server 2016 (13.x) で動作することが認定されたデータベースはデータベース互換性レベル 130 で暗黙的に認定されていました。 このデータベースは、データベース互換性レベルが 130 で維持される限り、SQL Server (SQL Server 2019 (15.x) など) と Azure SQL データベース の最近のバージョンで現状のまま動作できます。
これは Microsoft Azure SQL データベース 継続的インテグレーション運用モデルの基本原則です。 データベース エンジン は Azure で継続的に改善され、アップグレードされますが、既存のデータベースで現行の互換性レベルが維持されるため、基礎となる データベース エンジン にアップグレードされた後でも、引き続き設計どおりに動作します。
これは、SharePoint Server 2016 と SharePoint Server 2019 が SQL Server と Azure SQL Managed Instance で認定する方法でもあります。 これらの SharePoint Server バージョンでサポートされているデータベース互換性レベルを使用する任意の SQL Server データベース エンジンを展開できます。 詳細については、「SharePoint Server 2016 のハードウェア要件およびソフトウェア要件」と、「SharePoint Server 2019 のハードウェア要件およびソフトウェア要件」を参照してください。
互換性証明書を使用してアップグレード リスクを管理する
互換性証明書の使用は、データベースの最新化に役立つアプローチです。 開発者が互換性レベルに基づいて認定する場合は、SQL Server と Azure SQL Database でサポートされるアプリケーションの技術的要件を設定しますが、アプリケーションのライフサイクルはデータベース プラットフォームのライフサイクルから切り離します。 そうすることで、企業はライフサイクル ポリシーの必要に応じて SQL Server データベース エンジンを継続的にアップグレードして、コードに依存しない新しい拡張性やパフォーマンス拡張機能を使用できます。また、接続しているアプリケーションは、アップグレードを通してその機能的ステータスを維持します。
アップグレードの主なリスク要因は、機能に悪影響を及ぼす可能性とパフォーマンスの問題です。 互換性証明書は、そのようなアップグレード リスクの管理に安心を与えます。
Transact-SQL の動作に関連するものにおいて、あらゆる変更は、あるアプリケーションが正しいことを再認定する必要があることを意味します。 しかしながら、データベース互換性レベル設定は、サーバー全体ではなく、指定のデータベースに対してのみ、以前のバージョンの SQL Server との下位互換性を与えます。 データベース互換性レベルを現状のまま維持することで、データベース エンジン アップグレードの前後で、既存のアプリケーション クエリは引き続き同じ動作を示します。 Transact-SQL の動作と互換性レベルについては、「旧バージョンとの互換性を維持するための互換性レベルの使用」を参照してください。
パフォーマンスに関連するものにおいて、クエリ オプティマイザーの機能拡張がすべてのバージョンで導入されるため、データベース エンジン のバージョンが異なれば、クエリ プランが異なることが予想される可能性があります。 アップグレードの範囲におけるクエリ プランの違いは、通常、特定のクエリまたはワークロードに対して何らかの変更が悪影響を及ぼす可能性がある場合に、リスクに変換されます。 また、このリスクは通常、アプリケーションの再認証の必要性につながり、アップグレードを遅らせたり、ライフサイクルとサポートの問題を引き起こしたりすることがあります。
アップグレード リスクの軽減は、クエリ オプティマイザーの機能拡張が新しいリリースの既定互換性レベルに制限される理由です (言い換えると、あらゆる新しいバージョンで最も高い互換性レベルを利用できます)。 互換性認定には 、クエリ プランの形状保護が含まれます。データベース互換性レベル as-isを維持することは、データベース エンジンのアップグレード直後に、アップグレード前と同じクエリ最適化モデルを新しいバージョンで使用するように変換され、クエリ プランの形状は変更されないという概念です。
詳細については、この記事の「クエリ プラン シェイプを使用する理由」セクションを参照してください。
互換性レベルの詳細については、「旧バージョンとの互換性を維持するための互換性レベルの使用」を参照してください。
特定の互換性レベルに対して既に認定されている既存のアプリケーションについては、SQL Server データベース エンジン をアップグレードし、以前のデータベース互換性レベルを維持します。 このシナリオでは、アプリケーションを再認定する必要はありません。 詳細については、この記事の後半に出てくる「互換性レベルとデータベース エンジンのアップグレード」を参照してください。
新しい開発作業の場合、または既存のアプリケーションで インテリジェント クエリ処理や新しい Transact-SQL などの新機能を使用する必要がある場合は、データベース互換性レベルを SQL Server で使用可能な最新のレベルにアップグレードし、その互換性レベルで動作するようにアプリケーションを再認定することを計画します。 データベース互換性レベルのアップグレードに関する詳細については、「データベース互換性レベルのアップグレードのベスト プラクティス」を参照してください。
クエリ プラン シェイプを使用する理由
クエリ プラン シェイプは、クエリ プランを構成するさまざまな演算子の視覚的表現を指します。 これには、シーク、スキャン、結合、並べ替えなどの演算子に加えて、データの流れを示す演算子間のつながりと、意図した結果セットを生成するために実行する必要がある演算の順序が含まれます。 クエリ プラン シェイプは、クエリ オプティマイザーによって決定されます。
アップグレード中のクエリ パフォーマンスを常に予測できるように、基本的な目標の 1 つは、同じクエリ プラン シェイプを使用することになります。 これは、基礎となる データベース エンジン のバージョンが異なる場合でも、アップグレードの直後にデータベース互換性レベルを変更しないことで達成できます。 他には、クエリ実行エコシステムで変更がない場合 (利用できるリソースの大幅な変更など)、または基礎データのデータ配布で変更がない場合、クエリのパフォーマンスを変えないでください。
ただし、アップグレード後にパフォーマンスに影響を与える可能性がある要因は、クエリ プランの形状を維持することだけではありません。 データベースを新しいデータベース エンジンに移動し、環境に変更を加えた場合、クエリ プランがバージョン間で同じ形状を保持している場合でも、クエリのパフォーマンスにすぐに影響する要因が生じる可能性があります。 これらの環境の変更には、使用可能なメモリと CPU リソースが増減する新しいデータベース エンジン、サーバーまたはデータベース構成オプションの変更、クエリ プランの作成方法に影響するデータ分散の変更が含まれる場合があります。 このような理由から、データベース互換性レベルを維持するとクエリ プラン シェイプの変更の影響を受けずに済むが、クエリのパフォーマンスに影響を与える他の環境的変更 (ユーザーが変更を始めることもある) からは守られないということを理解しておくことが重要です。
詳細については、「クエリ処理アーキテクチャ ガイド」をご覧ください。
互換性証明書の利点
データベースの認定には、名前付きバージョン手法ではなく互換性基準手法として直接の利点があります。
アプリケーション認定をプラットフォームから分離します。 データベース エンジンを共有することで、Transact-SQL クエリを実行する必要があるだけのアプリケーションの場合、Azure とオンプレミスで別々の認定プロセスを維持する必要はありません。
アップグレード リスクを減らします。データベース プラットフォームを最新化するとき、アプリケーションとプラットフォーム レイヤーのアップグレード サイクルを分離できるため、中断が少なくなり、変更管理が改善されます。
コードを変更せずにアップグレードします。 互換性レベルをソース システムと同じに維持することで、コードを変更せずに、SQL Server または Azure SQL Database の新しいバージョンにアップグレードできます。より高いデータベース互換性レベルでのみ利用できる拡張機能をアプリケーションで使用する必要がない限り、すぐに再認定する必要はありません。
管理性とスケーラビリティを向上させます。データベース互換性レベルで制限されない拡張機能を使用することで、アプリケーションを変更しなくても、これらを向上させることができます。 SQL Server には、次のようなものがあります。
新しい システム動的管理ビュー、 拡張イベント、 自動チューニングにより、豊富な監視とトラブルシューティングが強化されました。
自動 ソフト NUMA、 高速データベース復旧、 メモリ最適化 tempdb メタデータなど、スケーラビリティが向上しました。
新しいデータベースは データベース エンジン バージョンの既定の互換性レベルに引き続き設定されます。 ただし、データベースを以前のバージョンの SQL Server から新しいバージョンの SQL Server または Azure SQL Database に復元またはアタッチする場合、データベースは既存の互換性レベルを維持します。
サポートされている互換性レベルを確認する
SQL Server または Azure SQL データベース の新しいバージョンにデータベースを移す前に、データベース互換性レベルが引き続きサポートされることを確認します。 データベース互換性レベルのサポート マトリックスは、 ALTER DATABASE 互換性レベルの引数で確認できます。
許可されるレベル (たとえば、SQL Server 2005 (9.x) の既定値であった 90) より低い互換性レベルのデータベースをアップグレードすると、許可される最も下の互換性レベル (100) にデータベースが設定されます。
現在の互換性レベルを確認するには、compatibility_level
の列に対してクエリを実行します。
互換性レベルとデータベース エンジンのアップグレード
データベース エンジンを最新バージョンにアップグレードするには、アップグレード前に存在していたデータベース互換性レベルとそのサポート状態を維持しながら、データベース内のアプリケーション コード (ストアド プロシージャ、関数、トリガーなどのプログラミング オブジェクト) とアプリケーション (アプリケーションによって送信された動的コードをキャプチャするワークロード トレースを使用) の静的な機能面検証を実行する必要があります。
これは、 SQL Server Management Studio の SQL Server 移行コンポーネントを使用して簡単に行うことができます。 レポート出力にエラーが存在しない (機能が不足しているか、または互換性がない) と、新しいターゲット バージョンの機能回帰からアプリケーションが保護されます。 データベースが新しいバージョンで動作するように変更が必要な場合は、ツールを使用して、変更が必要な場所と使用可能な回避策を特定できます。
この機能検証は、レガシ バージョン (SQL Server 2008 R2 (10.50.x) や SQL Server 2012 (11.x) など) から SQL Server または Azure SQL Database の新しいバージョンにデータベースを移動する場合に特に重要です。これは、アプリケーション コードが、データベース互換性レベルで保護されていない廃止された Transact-SQL を使用している可能性があるためです。 ただし、より新しいバージョン (SQL Server 2016 (13.x) など) から SQL Server 2022 (16.x) または Azure SQL Database に移行する場合、心配する必要がある廃止された Transact-SQL はありません。 廃止された Transact-SQL の詳細については、「旧バージョンとの互換性を維持するための互換性レベルの使用」を参照してください。
注意
SQL Server 移行コンポーネントは、データベース互換性レベル 100 以上をサポートしています。 ソース バージョンとしての SQL Server 2005 (9.x) は除外されます。
以前のデータベース互換性レベルを維持しながら、アップグレードの成功を検証するために最小限のテストを実行することをお勧めします。 自分のアプリケーションとシナリオでは何が「最小限のテスト」に相当するのかは、ご自身で判断してください。
クエリ プランの保護
Microsoft は、次の場合にクエリ プラン シェイプ保護を提供します。
前の SQL Server バージョン (ソース) が実行されていたハードウェアに相当するハードウェアで新しい SQL Server バージョン (ターゲット) が実行されるとき。
ターゲット SQL Server とソース SQL Server の両方で、サポート されている同じデータベース互換性レベル が使用されます。
ターゲット SQL Server とソース SQL Server の両方で 、同じ データベースとワークロードが使用されます。
これらの条件下で発生するクエリ プランの形状の回帰 (ソース SQL Server と比較して) はすべて対処されます。 この場合は、Microsoft カスタマー サポートにお問い合わせください。