クエリ調整アシスタント (QTA) を使ってクエリを調整する

完了

あなたは、移行前にクエリ ストアを使用してデータベースのパフォーマンスを監視し、このデータをアップグレード後のパフォーマンスと比較することにしました。 クエリ調整アシスタント (QTA) を使用して、後退したクエリを見つけて改善を提案することを計画しています。 このユニットでは、クエリ ストアと QTA を使用してクエリのパフォーマンスを維持する手順について説明します。

データベース アプリケーションはビジネスの運営を支える重要なシステムであるため、アップグレードのためのアクション プランとコンティンジェンシー計画を用意する必要があります。 コア運用データベースは一度に 1 つずつアップグレードします。 アップグレードしたデータベースのテスト計画を決定し、各データベースが問題なく運用環境に戻っていることを確認してから、他のデータベースをアップグレードします。

クエリ ストアを使用すると、クエリのパフォーマンスを継続的に監視したり、A/B テストでデータベースのアップグレードなどの変更の影響を測定したりできます。 QTA では、クエリ ストアで取り込まれたデータに基づき、後退したクエリを見つけて修正するために、アップグレード後の自動サポートが提供されます。

QTA を正常に機能させるには、次の手順を順番に適用する必要があります。

重要

クエリ ストアがクエリに関する現実的なメトリックを収集できるように、運用アプリケーション データベース、または運用データベースのワークロードに厳密に一致するアプリケーション ワークロードを持つデータベースを必ず使用してください。

  1. データベースを SQL Server 2022 に移行します。
  2. 互換性レベルはそのまま (前の SQL Server のバージョン) にしておきます。
  3. データベースでクエリ ストアを有効にします。
  4. クエリ ストアに、十分に現実的なユーザー アクティビティに基づいてクエリのベースライン メトリックを収集させます。
  5. 互換性レベルを SQL Server 2022 (160) にアップグレードします。
  6. ここでも、クエリ ストアに、十分に現実的なユーザー アクティビティに基づいてクエリに関するデータを収集させます。
  7. QTA を使用して、データベース互換レベルの変更前と変更後のクエリのパフォーマンスを比較します。 後退したクエリが見つかった場合は、修正を特定します。

データベースを移行する

SQL Server 2022 に移行する準備ができたら、まず、データベースを新しいインスタンスに移行します。 この移行を行うには、複数の方法があります。 たとえば、簡単なバックアップと復元、データベース ミラーリング、または一括読み込みを使用できます。 最適な選択は、現在の環境の構成と、移行元の SQL Server のバージョンによって異なります。 Azure Data Migration Service (DMS) は、SQL Server 2005 以降のデータベースをサポートしているため、優れたソリューションです。

Note

Azure DMS は、Azure SQL Managed Instance へのデータベースの移行をサポートしています。 まず Azure Data Studio 用 Azure SQL Migration 拡張機能を使います。

互換性レベルを変更しない

データベースを移行した後は、互換性レベルを変更しないでください。 現在のデータベース構成を使用してベースラインを作成する必要があるため、この手順は重要です。 互換性レベルを SQL Server 2014 (120) 以降に移行するまで、SQL Server ではレガシ カーディナリティ推定器が使用されます。 SQL Server 2014 では、アップグレードされたカーディナリティ推定器が導入されました。これは、ほとんどのクエリにメリットがありますが、パフォーマンスに悪影響を及ぼすことはほとんどありません。

クエリ ストアを有効にする

データベース互換レベルは以前のバージョンのままですが、クエリ ストアはサーバー レベルの機能であるため、データベースでクエリ ストアを有効にすることができます。 クエリ ストアを有効にするには:

  1. SQL Server Management Studio (SSMS) で、データベースを右クリックし、[プロパティ] を選びます。
  2. [データベースのプロパティ] ウィンドウの左側のペインで [クエリ ストア] を選びます。
  3. [操作モード (要求)][読み取り専用] または [読み取り/書き込み] に設定します。
  4. [OK] を選択します。

または、次のステートメントを実行して、既定の READ WRITE モードでクエリ ストアを有効にすることもできます。

ALTER DATABASE <database-name> SET QUERY_STORE = ON

クエリ ストアにデータを収集させる

移行したデータベースを運用環境に戻し、アプリケーションまたはレポートから任意のデータベース接続を切り替えます。 データベースは、運用アプリケーションからのクエリの受信を開始します。 クエリ ストアがデータベース上の現実的なワークロードを収集できるように、十分な実行時間を与えます。

クエリ ストアで、営業時間、夜間処理、メンテナンス期間などのアクティビティを含む、ビジネス アクティビティの一般的なサイクルをキャプチャする必要があります。 多くの企業では、1 週間のアクティビティで十分ですが、一部の企業では、この期間が短かったり、長かったりする場合があります。

多くの企業は、隔週の給与計算や月末処理のための主要なビジネス サイクルがあるため、独自のアクティビティがあります。 データベースが経験するビジネス サイクルのタイミングに注意する必要があります。 食料品店の場合、ほとんどのデータベース アクティビティが週次の在庫到着と補充サイクルとなります。

収集されたデータは、[クエリ ストア] タブを参照して確認できます。 このタブを表示するには、SSMS のオブジェクト エクスプローラーでデータベース ツリーを展開して、[クエリ ストア] を表示します。 十分なデータが収集されていることを確認したら、アップグレードをスケジュールすることができます。

互換性レベルをアップグレードする

データベースに変更を行う前に、可能であれば勤務時間外にデータベースをバックアップすることをお勧めします。 バックアップを作成した後、次のように互換性レベルをアップグレードします。

  1. SSMS のオブジェクト エクスプローラーでデータベースを右クリックし、[プロパティ] を選びます。
  2. [データベースのプロパティ] ウィンドウで、[オプション] タブを選びます。
  3. 互換性レベルを [SQL Server 2022 (160)] に変更し、[OK] を選びます。

あるいは、次のステートメントを実行することもできます。

ALTER DATABASE <database-name> SET COMPATIBILITY_LEVEL = 160

クエリ ストアに引き続きデータを収集させる

データベースがアップグレードされ、アプリケーションが再開された後も、クエリ ストアはバックグラウンドで引き続き実行され、クエリのメトリックを収集します。 クエリ オプティマイザーが使用する新しいカーディナリティ推定器により、クエリが潜在的な問題にさらされるようになりました。

引き続きクエリ ストアを実行し、アップグレード前と同じ期間データを収集できるようにします。 ただし、クエリの回帰はすぐに現れる可能性があるため、パフォーマンスの問題を直ちに修復するためのアクションを実行できます。

クエリ調整アシスタントを実行する

QTA を実行して、後退クエリに対処します。 QTA を構成するには:

  1. SSMS のオブジェクト エクスプローラーでデータベースを右クリックし、[タスク]>[データベースのアップグレード]>[新しいデータベース アップグレード セッション] の順に選択します。
  2. クエリ調整アシスタントのウィザード[セットアップ] 画面で、[キャプチャするワークロードの実行期間 (日数)][ターゲット データベースの互換性レベル] を入力します。
  3. [次へ] を選び、[設定][チューニング] の画面を構成します。
  4. [完了] を選びます。

QTA を監視するには、データベース名を右クリックし、[タスク]>[データベースのアップグレード]>[モニター セッション] の順に選択します。 QTA では、後退した上位のクエリの概要レポートが提供され、観測されたデータとベースライン データが比較されます。 その後、パフォーマンスが低下したクエリをチューニングするために QTA が推奨する変更を表示できます。

まとめ

データベースのアップグレード後に QTA を使用して、アップグレードの結果として後退するクエリを見つけて修正します。 QTA で後退したクエリを見つけるには、まず、古い互換性レベルでクエリを測定するためにクエリ ストアを使用して、ベースラインを作成する必要があります。

その後、クエリ ストアによってアップグレード後のメトリックが収集されます。これを QTA と共に使用して、新しいパフォーマンスをベースラインと比較できます。 QTA 操作にとって、アップグレードの前後にクエリ ストアがデータを収集することは非常に重要です。

QTA では、後退したクエリが特定されると、パフォーマンスを向上させるための最適なアクションを見つけるために実験が行われます。 その後、これらのアクションを適用することができます。