自動チューニングについて説明する

完了

自動チューニングは、ワークロードについて継続的に学習し、潜在的な問題と改善点を特定する監視および分析機能です。

自動チューニングの推奨事項は、クエリ ストアから収集されたデータに基づいています。 実行プランは、スキーマの変更、インデックスの変更、または統計の更新を引き起こすデータの変更によって、時間の経過と共に進化していきます。 この進化により、実行プランが特定のクエリの要求を満たさなくなったときに、クエリのパフォーマンスが低下する可能性があります。

さらに、自動チューニングでは、パフォーマンス メトリックに機械学習サービスを適用して収集することで、提案の改善や自己修正を行うことができます。

オンプレミスとクラウドのどちらでも、自動チューニングを使用すると、クエリ実行プランの回帰によって発生する問題を識別できます。 また、Azure SQL Database では、インデックスのチューニングによってクエリのパフォーマンスを向上できます。 Azure SQL Database の自動チューニングでは、クエリのパフォーマンスを向上させるために、データベースに対して追加または削除する必要があるインデックスを識別することができます。

自動プラン修正

データベース エンジンは、クエリ ストア データを利用して、クエリ実行プランのパフォーマンスが低下したタイミングを判断できます。 退行したプランはユーザー インターフェイスを通して手動で識別できますが、クエリ ストアには自動的に通知するオプションも用意されています。

Screenshot of the Query Store view for regressed plan correction.

上の例では、プラン ID 1 にチェックマークが表示されています。これは、そのプランが強制されたことを意味します。 この機能を有効にすると、次の場合に、推奨されるクエリ実行プランがデータベース エンジンによって自動的に強制されます。

  • 前のプランのエラー率が推奨されているプランよりも高かった場合
  • 推定 CPU ゲインが 10 秒を超えた場合
  • 強制されたプランのパフォーマンスが前のプランより優れていた場合

このプランは、クエリの 15 回の実行後に、最後の既知の適切なプランに戻ります。

プランの強制が自動的に行われる場合、データベース エンジンによって最後の既知の適切なプランが適用され、クエリ実行プランのパフォーマンスの監視も引き続き実行されます。 強制されたプランで前のプランよりもパフォーマンスが向上しない場合、強制が解除され、強制的に新しいプランがコンパイルされます。 強制されたプランのパフォーマンスが前の不適切なプランよりも優れていることが続く場合、再編集が発生するまでそのプランが強制され続けます。

次に示すように、T-SQL クエリを使用して自動プラン修正を有効にすることができます。 コマンドを正常に実行するには、クエリ ストアを有効にし、読み取り/書き込みモードにする必要があります。 これら 2 つの条件のいずれかが満たされていない場合、ALTER ステートメントは失敗します。

ALTER DATABASE [WideWorldImporters] SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON);

自動チューニングの推奨事項については、動的管理ビュー (DMV) の sys.dm_db_tuning_recommendations で確認できます。これは SQL Server 2017 以降で使用でき、Azure SQL Database ソリューションでも使用できます。 この DMV では、推奨事項が提供された理由、推奨事項の種類、推奨事項の状態などの情報が提供されます。 データベースの自動チューニングが有効になっていることを確認するには、sys.database_automatic_tuning_options のビューを確認します。

インデックスの自動管理

Azure SQL Database で、インデックスの自動チューニングを実行できます。 データベースでは、時間の経過と共に、既存のワークロードについての学習が行われ、パフォーマンスを向上させるためのインデックスの追加または削除に関する推奨事項が提供されます。 改善されたクエリ プランの強制と同様に、次に示すように、既存のインデックスのパフォーマンスに応じて、インデックスの自動作成または削除を許可するようにデータベースを構成できます。

Screenshot of Automatic tuning Options for Azure SQL Database.

有効にすると、[パフォーマンスの推奨事項] ページで、クエリのパフォーマンスに応じて作成または削除できるインデックスが識別されます。 注意すべき点として、この機能は、オンプレミス データベースでは使用できず、Azure SQL Database でのみ使用できます。

または、次のクエリを使用して、データベースで有効になっている自動チューニング機能を確認します。

SELECT name,
    desired_state_desc,
    actual_state_desc,
    reason_desc
FROM sys.database_automatic_tuning_options

新しいインデックスを作成すると、リソースが消費される可能性があります。また、ワークロードに悪影響が出ないようにするには、インデックスを作成するタイミングが重要です。

Azure SQL Database では、パフォーマンスの低下を引き起こさないようにするため、新しいインデックスを実装するのに必要なリソースが監視されます。 チューニング アクションは、リソースが既存のワークロードに必要で、インデックスの作成に使用できない場合などでは、リソースが使用可能になるまで延期されます。

監視により、実行されるアクションがパフォーマンスに悪影響を及ぼさないようにされます。 インデックスが削除され、クエリのパフォーマンスが著しく低下した場合は、最近削除されたインデックスが自動的に再作成されます。