クエリ調整アシスタント (QTA) が自分に適しているかどうかを判断する

完了

データベース バージョンのアップグレード後のクエリ プランの後退とパフォーマンス低下の可能性があることを認識しています。 データベースのアップグレード後のパフォーマンスを維持できるようにするには、後退したクエリを特定して軽減するための最適な方法を見つける必要があります。 このユニットでは、クエリ ストアとクエリ調整アシスタント (QTA) を使用して、アップグレード後にパフォーマンスの低下が問題でないことを確かめる方法について説明します。

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

QTA は、アップグレード後に後退するクエリを見つけるためのクエリ ストア データに依存します。 クエリ ストアを使用すると、アップグレードする前のより古いデータベース バージョンのメトリックを収集できます。

クエリ ストアは SQL Server 2016 で導入され、QTA は SQL Server 2017 で導入されました。 SQL Server 2022 のインスタンスで実行されるデータベース バージョンでは、これらの両方の機能を使用できます。 これらのツールは SQL Server Management Studio (SSMS) に統合され、データベース レベルで動作します。

データベースの互換性レベルによってそのバージョンが決まり、このバージョンによって、使用される ''カーディナリティ推定'' のバージョンが決まります。 カーディナリティ推定によって、クエリで返される可能性のある行の数が予測されるため、クエリ オプティマイザーは最も低コストのプランを選択できます。 SQL Server 2014 では、アップグレードされたカーディナリティ推定アルゴリズムが導入されました。これは、ほとんどのクエリにメリットがありますが、パフォーマンスに悪影響を及ぼすことはほとんどありません。

パフォーマンスへの影響を測定するために、クエリ ストアでは、後退したクエリと、ほとんどのシステム リソースを消費するクエリが報告されます。 QTA では、データベースのアップグレードの前と後のクエリ ストアのクエリ パフォーマンス データが比較され、パフォーマンスを向上させるためのクエリの実験が行われます。

Note

QTA は、Azure SQL Database や SQL Managed Instance データベースでは使用できません。 これらのデータベースでは、Azure Data Studio 用の Azure SQL Migration 拡張機能の使用を検討してください。

QTA と自動プラン修正

SQL Server で Transact-SQL (T-SQL) クエリが実行されると、クエリを実行できる可能性のあるプランが分析されます。 SQL Server では、正常に実行されたクエリのプランがキャッシュされ、クエリが再度実行されたときにそれらが再利用されます。

SQL Server では、クエリに最適なプランが選択され、状況によって新しいプランが選択されるまで使用されます。 これらの状況には、プランを再コンパイルするデータベース エンジン、追加または削除されるインデックス、または変更中の統計が含まれる場合があります。

新しいプランが、常に古いものを改善したものであるとは限りません。 次のコマンドを実行して、プランが後退したクエリを検索できます。

SELECT * FROM sys.dm_db_tuning_recommendations

その後、sp_force_plan ストアド プロシージャを使用して、SQL Server に推奨される特定のプランを強制的に使用させることができます。

EXEC sp_force_plan @query_id = 1187, @plan_id = 1975

sp_force_plan プロシージャは、アップグレードされたデータベースで、多くのクエリが後退している場合、面倒になる可能性がある手動のプロセスです。 SQL Server 2017 では、''自動プラン修正'' という名前の新機能が導入され、クエリが自動的に調整され、手動による介入が不要になりました。 次のステートメントを実行して、データベースで自動プラン修正を有効にすることができます。

ALTER DATABASE <database-name> SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON)

データベース レベルで設定すると、自動プラン修正により、SQL Server に対して最新の適切なクエリ プランを使用するように指示されます。 SQL Server では引き続き、プランの実行中に後退を見つけ、最適なパフォーマンスが確実に得られるようにプランが監視されます。

自動プラン修正は、QTA とは異なる方法で動作します。 最新の適切なプランを使用することは、以前のカーディナリティ推定にロールバックすることを意味する場合があります。 逆に、QTA では、ターゲット データベースの互換性レベルにマップされているカーディナリティ推定のバージョンを使用して実験が行なわれます。

まとめ

QTA は SQL Server 2022 で利用でき、動作するクエリ ストアによって異なります。 QTA には、アップグレード後にクエリを観察して比較できるように、以前の互換性レベルでのデータベースに関するクエリ ストアのベースライン データが必要です。

SQL Server 2017 で導入された自動プラン修正により、クエリ プランを手動で特定して強制する必要がなくなります。 自動プラン修正はデータベース レベルで有効にできますが、カーディナリティ推定のバージョンがロールバックされる場合があります。 QTA では、ターゲット互換性レベルにマップされているカーディナリティ推定のバージョンが使用されます。