クエリ調整アシスタント (QTA) の概要

完了

SQL Server 2012 の 2 つの運用データベースを新しい SQL Server 2022 インスタンスに移行する予定です。 データベースは使用中であるため、最初に、互換性レベルを元の設定のままにしておき、アプリケーションを再指定する必要があります。 SQL Server 2014 以降、カーディナリティ推定器が変更されたため、データベースの互換性レベルを SQL Server 2022 (160) に変更する前に、クエリ パフォーマンスを測定する必要があります。

互換性レベルを移動し、新しいカーディナリティ推定器アルゴリズムを適用する場合にパフォーマンスが低下するすべてのクエリを見つけて修正する必要があります。 この方法を使用して、互換性レベルをアップグレードした後に比較するパフォーマンスのベースラインを測定します。

クエリ ストアを有効にすると、パフォーマンスが低下するクエリを見つけるために必要なメトリックが収集されます。また、クエリ調整アシスタント (QTA) を使用すると、パフォーマンスが低下するクエリを修正する手順が示されます。 このユニットでは、クエリ ストアと QTA の概要について説明します。

クエリ ストアの概要

クエリ ストア機能は、データベース内のクエリの実行とパフォーマンスに関する情報を継続的に収集するために、SQL Server 2016 で導入されました。 クエリ ストアは、フライトデータ レコーダーのように動作して、クエリおよびプランのランタイム情報を収集します。 このランタイム データを保存すれば、パフォーマンスを経時的に追跡できます。 何か問題が発生した場合、情報の履歴が残っているため、問題の原因を突き止めることができます。

SQL Server 2022 以降、Azure SQL Database と SQL Managed Instance では、新しいデータベースに対してクエリ ストアが既定で有効になります。 SQL Server 2016、SQL Server 2017、SQL Server 2019 では、クエリ ストアは既定で有効になりませんが、SQL Server 2016 以降のインスタンス上のデータベースでは、クエリ ストアを有効または無効にすることができ、構成することもできます。 データベースでクエリ ストアを有効にする手順またはクエリ ストアの構成を確認する手順については、次のユニットを参照してください。

クエリ ストアは、SQL Server インスタンスよりも前の互換性レベルのデータベースで動作できます。 たとえば、データベースを SQL Server 2012 から SQL Server 2022 に移行し、互換性レベルを 110 のままにしておいても、クエリ ストアは、そのデータベースで引き続き動作できます。

ただし、インテリジェント クエリ処理やその他の自動パフォーマンス改善の多くの機能は、新しいデータベース互換性レベルに対してのみ有効になります。 このため、最新の SQL Server データベース互換モードでアプリケーションのパフォーマンス テストを試みる必要があります。 クエリ ストアと QTA は、このパフォーマンス テストに役立ちます。

データベースで、クエリ ストアを有効にすると、クエリについて次の統計が収集され、報告されます。

  • 後退したクエリ
  • 全体のリソース消費量
  • リソースを消費する上位のリソース
  • 強制適用されたプランのあるクエリ
  • 高バリエーションのクエリ
  • クエリ待機統計
  • 追跡したクエリ

クエリ オプティマイザーで、パフォーマンスの低下の原因となる新しいクエリ プランが使用されると、クエリのパフォーマンスが低下します。 パフォーマンスの低下は、インデックスの追加、削除、または変更、統計の更新、データ カーディナリティの変更などの重要な変更の後に発生する可能性があります。

クエリ ストア以前は、パフォーマンスの低下の原因に関する分析情報が SQL Server によって提供されていなかったため、データベース開発者と管理者にとって、問題を特定することは課題でした。 クエリ ストアを使用できるようになったので、履歴から、パフォーマンスが低下したクエリを検出し、オプティマイザーで特定のプランが使用されるように強制することができます。

おそらく数千のうちのごく少数のクエリでほとんどのシステム リソースが消費されるのが一般的です。 クエリ ストアでは、後退により、あるいは調整が不十分であるため、消費量が最も多くなっているクエリが識別されます。 構成に応じて、期間、CPU、メモリ、I/O、または実行回数で結果をフィルター処理できます。

クエリ ストアを使用すると、進行中のパフォーマンスを監視できます。また、A/B テストに使用して、1 つの変更の適用前と適用後のパフォーマンスを比較することもできます。 たとえば、結合参照の速度が向上するように、クエリで参照されるテーブルにインデックスを追加してクエリのパフォーマンスを調整できます。 インデックスを追加する前と後のクエリ ストア内の統計を比較すると、インデックスがパフォーマンスに影響するかどうかがわかります。 また、新しいハードウェアの追加後やアプリケーションの更新後に統計を比較することもできます。

クエリ調整アシスタントの概要

クエリ調整アシスタント (QTA) は、クエリ ストアのデータを使用して、パフォーマンスが低下し始めているクエリを検出します。 QTA では、パフォーマンスが低下し、ユーザーに影響する前に、クエリを高速化するソリューションを見つけるために自動的に実験を行います。

クエリ ストアと QTA を使用して、アップグレード後にデータベースのパフォーマンスを監視し、最適化することができます。 データベースを SQL Server 2016 以降に移行した後、データベースの互換性レベルはそのままにし、クエリ ストアを有効にして、クエリ パフォーマンスのベースライン統計を収集します。

その後、互換性レベルを変更し、引き続きクエリ ストアのデータを使用して、クエリのパフォーマンス統計を測定します。 統計を比較して、各クエリのパフォーマンスが、アップグレード前よりも向上しているか、同じであるか、または低下しているかを確認できます。

互換性レベルを変更してデータベースをアップグレードすると、SQL Server によって、使用しているカーディナリティ推定器のバージョンが変更されます。 QTA では、カーディナリティ推定の変更によるクエリのパフォーマンス低下の考えられるパターンを探し出し、パフォーマンスの改善策を見つけるための実験を行います。 その後、改善が見られたクエリに関するプラン ガイドを作成できます。

まとめ

クエリ ストアでは、航空機のフライト データ レコーダーでアクティビティが取り込まれるのと同じように、クエリのパフォーマンス統計が継続的に測定されます。 クエリ ストアは、データベースの互換性レベルに関係なく、SQL Server 2016 以降のインスタンス上で任意のデータベースに対して有効にすることができます。 クエリ ストアを使用して、クエリのパフォーマンスを継続的に監視したり、A/B テストに使用して 1 つの変更の影響を測定したりすることができます。

データベースを SQL Server 2014 以降にアップグレードする場合、カーディナリティ推定器を変更すると、以前のバージョンの SQL Server では高速だったクエリの速度が低下する可能性があります。 理想的には、ユーザーに影響を与える前に、パフォーマンスの低下を検出して修正する必要があります。 データベースでクエリ ストアを有効にすると、クエリで統計が継続的に収集されます。 その後、QTA を使用して、問題になる前に、パフォーマンスが低下しているクエリを特定して修正できます。