自動チューニングAutomatic tuning

適用対象:Applies to: はいSQL Server 2017 (14.x)SQL Server 2017 (14.x)yesSQL Server 2017 (14.x)SQL Server 2017 (14.x) 以降 はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database適用対象:Applies to: はいSQL Server 2017 (14.x)SQL Server 2017 (14.x)yesSQL Server 2017 (14.x)SQL Server 2017 (14.x) and later はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database

自動チューニングは、潜在的なクエリ パフォーマンスの問題に関する洞察を提供し、解決策を推奨して、特定された問題を自動的に解決するデータベース機能です。Automatic tuning is a database feature that provides insight into potential query performance problems, recommend solutions, and automatically fix identified problems.

で導入された自動チューニングは SQL Server 2017 (14.x) 、潜在的なパフォーマンスの問題が検出されるたびに通知を行い、是正措置を適用したり、パフォーマンスの問題を自動的に修正したりできるようにし データベース エンジンDatabase Engine ます。Automatic tuning, introduced in SQL Server 2017 (14.x), notifies you whenever a potential performance issue is detected and lets you apply corrective actions, or lets the データベース エンジンDatabase Engine automatically fix performance problems. 自動チューニングを SQL ServerSQL Server 使用すると、 クエリ実行プランの選択の回帰 によって発生するパフォーマンスの問題を特定し、修正することができます。Automatic tuning SQL ServerSQL Server enables you to identify and fix performance issues caused by query execution plan choice regressions. また、自動チューニングでは Azure SQL データベースAzure SQL Database 、必要なインデックスを作成し、未使用のインデックスを削除します。Automatic tuning in Azure SQL データベースAzure SQL Database also creates necessary indexes and drops unused indexes. クエリ実行プランの詳細については、「 実行プラン」を参照してください。For more information on query execution plans, see Execution Plans.

は、 SQL Server データベース エンジンSQL Server Database Engine データベースで実行されるクエリを監視し、ワークロードのパフォーマンスを自動的に向上させます。The SQL Server データベース エンジンSQL Server Database Engine monitors the queries that are executed on the database and automatically improves performance of the workload. には、 データベース エンジンDatabase Engine データベースをワークロードに動的に適合させることによって、クエリのパフォーマンスを自動的に調整して向上させることができるインテリジェンスメカニズムが組み込まれています。The データベース エンジンDatabase Engine has a built-in intelligence mechanism that can automatically tune and improve performance of your queries by dynamically adapting the database to your workload. 次の2つの自動チューニング機能を使用できます。There are two automatic tuning features that are available:

  • 自動プラン修正は、パラメーターの感度やパラメータースニッフィング の問題など、問題のあるクエリの実行プランが特定され、回帰が発生する前に最後の既知の良好なプランを強制することによって、クエリ実行プランに関連するパフォーマンスの問題が修正されます。Automatic plan correction identifies problematic query execution plans, such as a parameter sensitivity or parameter sniffing issues, and fixes query execution plan-related performance problems by forcing the last known good plan before the regression occurred. 適用対象:SQL ServerSQL Server (開始値 SQL Server 2017 (14.x)) および Azure SQL データベースAzure SQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017 (14.x)) and Azure SQL データベースAzure SQL Database

  • 自動インデックス管理 では、データベースに追加する必要があるインデックスと、削除する必要があるインデックスが識別されます。Automatic index management identifies indexes that should be added in your database, and indexes that should be removed. 適用対象: Azure SQL データベースAzure SQL DatabaseApplies to: Azure SQL データベースAzure SQL Database

自動チューニングを行う理由Why automatic tuning?

従来のデータベース管理の主な作業の3つは、ワークロードの監視、重要な Transact-SQLTransact-SQL クエリの特定、パフォーマンス向上のために追加する必要があるインデックスの識別、パフォーマンス向上のために削除される可能性があるインデックスの識別です。Three of the main tasks in classic database administration are monitoring the workload, identifying critical Transact-SQLTransact-SQL queries, and identifying indexes that should be added to improve performance, or indexes that are rarely used and could be removed to improve performance. では、 SQL Server データベース エンジンSQL Server Database Engine 監視する必要があるクエリとインデックスについて詳細な洞察を得ることができます。The SQL Server データベース エンジンSQL Server Database Engine provides detailed insight into the queries and indexes that you need to monitor. ただし、データベースを常に監視することは厄介で面倒なタスクであり、多数のデータベースを処理する場合は特にそうなります。However, constantly monitoring a database is a hard and tedious task, especially when dealing with many databases. 非常に多くのデータベースを管理することは、効率的に行うことができない場合があります。Managing a huge number of databases might be impossible to do efficiently. データベースの監視とチューニングを手動で行うのではなく、監視とチューニングアクションの一部を、 データベース エンジンDatabase Engine 自動チューニング機能を使用してに委任することを検討してください。Instead of monitoring and tuning your database manually, you might consider delegating some of the monitoring and tuning actions to the データベース エンジンDatabase Engine using automatic tuning feature.

自動チューニングのしくみHow does automatic tuning work?

自動チューニングは、継続的な監視と分析のプロセスであり、ワークロードの特性を常に把握し、潜在的な問題と改善点を識別します。Automatic tuning is a continuous monitoring and analysis process that constantly learns about the characteristics of your workload and identifies potential issues and improvements.

自動チューニング プロセス

このプロセスにより、ワークロードのパフォーマンスを向上させる可能性のあるインデックスとプラン、およびワークロードに影響を与えるインデックスを見つけることで、データベースをワークロードに動的に適応させることができます。This process enables the database to dynamically adapt to your workload by finding what indexes and plans might improve the performance of your workloads and what indexes affect your workloads. これらの結果に基づいて、自動チューニングによって、ワークロードのパフォーマンスを向上させるチューニング操作が適用されます。Based on these findings, automatic tuning applies tuning actions that improve the performance of your workload. また、自動チューニングでは、ワークロードのパフォーマンスが向上するように変更を実装した後に、データベースのパフォーマンスが継続的に監視されます。In addition, automatic tuning continuously monitors the performance of the database after implementing any changes to ensure that it improves performance of your workload. パフォーマンスを向上させなかったアクションは、自動的に元に戻されます。Any action that didn't improve performance is automatically reverted. この検証プロセスは、自動チューニングによって行われたすべての変更がワークロードの全体的なパフォーマンスを低下させないようにするための重要な機能です。This verification process is a key feature that ensures any change made by automatic tuning does not decrease the overall performance of your workload.

自動プラン修正Automatic plan correction

自動プラン修正は、 実行プランの選択の回帰 を識別する自動チューニング機能であり、前回正常起動時のプランを強制することによって自動的に問題を修正します。Automatic plan correction is an automatic tuning feature that identifies execution plan choice regression and automatically fixes the issue by forcing the last known good plan. クエリ実行プランとクエリオプティマイザーの詳細については、「 クエリ処理アーキテクチャガイド」を参照してください。For more information about query execution plans and the Query Optimizer, see the Query Processing Architecture Guide.

重要

自動プラン修正は、ワークロード追跡のためにデータベースで有効になっているクエリストアに依存します。Automatic plan correction depends on Query Store being enabled in the database for workload tracking.

実行プランの選択の回帰とはWhat is execution plan choice regression?

では、 SQL Server データベース エンジンSQL Server Database Engine さまざまな実行プランを使用してクエリを実行でき Transact-SQLTransact-SQL ます。The SQL Server データベース エンジンSQL Server Database Engine may use different execution plans to execute the Transact-SQLTransact-SQL queries. クエリプランは、統計、インデックス、およびその他の要因によって異なります。Query plans depend on the statistics, indexes, and other factors. クエリの実行に使用する最適なプランは、 Transact-SQLTransact-SQL これらの要因の変化に応じて、時間の経過と共に変わる可能性があります。The optimal plan that should be used to execute a Transact-SQLTransact-SQL query might change over time depending on changes in these factors. 場合によっては、新しいプランが前のプランよりも優れているとは限りません。新しいプランでは、 パラメーターの感度やパラメータースニッフィング に関連する問題など、パフォーマンスの回帰が発生する可能性があります。In some cases, the new plan might not be better than the previous one, and the new plan might cause a performance regression, such as a parameter sensitivity or parameter sniffing related issue.

クエリ実行プランの選択の回帰Query execution plan choice regression

プラン選択の回帰が発生した場合は常に、以前の良好なプランを見つけて、現在のプランの代わりに使用することをお勧めします。Whenever you notice a plan choice regression has occurred, you should find a previous good plan and force it to be used instead of the current one. これを行うには、プロシージャを使用し sp_query_store_force_plan ます。This can be done by using the sp_query_store_force_plan procedure. のは、 データベース エンジンDatabase Engine SQL Server 2017 (14.x) 低下したプランと推奨される是正措置に関する情報を提供します。The データベース エンジンDatabase Engine in SQL Server 2017 (14.x) provides information about regressed plans and recommended corrective actions. また、では、 データベース エンジンDatabase Engine このプロセスを完全に自動化し、 データベース エンジンDatabase Engine 計画の変更に関連する問題を修正することができます。Additionally, データベース エンジンDatabase Engine enables you to fully automate this process and let データベース エンジンDatabase Engine fix any problem found related to the plan change.

重要

ベースラインがキャプチャされた後のデータベース互換性レベルのアップグレードのスコープで自動プラン修正を使用して、ワークロードアップグレードのリスクを自動的に軽減する必要があります。Automatic plan correction should be used in the scope of a database compatibility level upgrade, after a baseline has been captured, to automatically mitigate workload upgrade risks. このユースケースの詳細については、「 新しい SQL Server へのアップグレード中にパフォーマンスの安定性を維持する」を参照してください。For more information about this use case, see Keep performance stability during the upgrade to newer SQL Server.

自動プラン選択の修正Automatic plan choice correction

は、 データベース エンジンDatabase Engine プラン選択の回帰が検出されるたびに、最新の既知の正常なプランに自動的に切り替えることができます。The データベース エンジンDatabase Engine can automatically switch to the last known good plan whenever a plan choice regression is detected.

クエリ実行プランの選択の修正Query execution plan choice correction

は、不適切なプラン データベース エンジンDatabase Engine の代わりに使用する必要があるプランを含め、プランの選択の可能性のある回帰を自動的に検出します。The データベース エンジンDatabase Engine automatically detects any potential plan choice regression, including the plan that should be used instead of the wrong plan. によって、 データベース エンジンDatabase Engine 回帰が発生する前に最後の既知の正常なプランが適用されると、強制されたプランのパフォーマンスが自動的に監視されます。When the データベース エンジンDatabase Engine applies the last known good plan before the regression occurred, it automatically monitors the performance of the forced plan. 強制プランが低下したプランよりも適切でない場合、新しいプランは強制されず、は データベース エンジンDatabase Engine 新しいプランをコンパイルします。If the forced plan is not better than the regressed plan, the new plan will be unforced and the データベース エンジンDatabase Engine will compile a new plan. によって、強制され データベース エンジンDatabase Engine たプランが低下したプランよりも優れていることが確認されると、強制されたプランが保持されます。If the データベース エンジンDatabase Engine verifies that the forced plan is better than the regressed plan, the forced plan will be retained. 再コンパイルが行われるまで (たとえば、次の統計の更新やスキーマの変更で) 保持されます。It will be retained until a recompile occurs (for example, on the next statistics update or schema change). プランの強制および強制可能なプランの種類の詳細については、「 プランの強制制限」を参照してください。For more information about plan forcing and types of plans that can be forced, see Plan forcing limitations.

注意

SQL ServerSQL Serverプランの強制実行を確認する前にインスタンスを再起動すると、そのプランは自動的に強制解除されます。If the SQL ServerSQL Server instance is restarted before a plan forcing action is verified, that plan will be automatically unforced. それ以外の場合、プランの強制は再起動時に保持され SQL ServerSQL Server ます。Otherwise, plan forcing is persisted on SQL ServerSQL Server restarts.

自動プラン選択修正の有効化Enabling automatic plan choice correction

データベースごとの自動チューニングを有効にし、プラン変更の回帰が検出されるたびに、最新の良好なプランを強制的に適用するように指定することができます。You can enable automatic tuning per database and specify that the last good plan should be forced whenever some plan change regression is detected. 自動調整は、次のコマンドを使って有効にします。Automatic tuning is enabled using the following command:

ALTER DATABASE <yourDatabase>
SET AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = ON ); 

このオプションを有効にすると、では、 データベース エンジンDatabase Engine 推定 CPU 到達率が10秒を超える場合、または新しいプランのエラー数が推奨されるプランのエラー数よりも多い場合、によって自動的に推奨設定が強制されます。また、強制されたプランが現在のプランより優れていることを確認します。Once you enable this option, the データベース エンジンDatabase Engine will automatically force any recommendation where the estimated CPU gain is higher than 10 seconds, or the number of errors in the new plan is higher than the number of errors in the recommended plan, and verify that the forced plan is better than the current one.

代替 - 手動プラン選択修正Alternative - manual plan choice correction

自動チューニングを使用しない場合、ユーザーは定期的にシステムを監視し、低下したのあるクエリを探す必要があります。Without automatic tuning, users must periodically monitor the system and look for the queries that have regressed. プランに低下したがある場合、ユーザーは以前の良好なプランを検索し、プロシージャを使用して、現在のプランではなく強制的に実行する必要があり sp_query_store_force_plan ます。If any plan has regressed, the user should find a previous good plan and force it instead of the current one by using sp_query_store_force_plan procedure. 統計やインデックスの変更が原因で古いプランが無効になる可能性があるため、前回の既知の良好なプランを強制的に適用することをお勧めします。The best practice would be to force the last known good plan because older plans might be invalid due to statistic or index changes. 前回正常起動時のプランを強制的に実行するユーザーは、強制プランを使用して実行されるクエリのパフォーマンスを監視し、強制されたプランが想定どおりに動作することを確認する必要があります。The user who forces the last known good plan should monitor performance of the query that is executed using the forced plan and verify that forced plan works as expected. 監視と分析の結果に応じて、プランを強制的に適用するか、ユーザーがクエリを最適化する別の方法 (書き直しなど) を見つける必要があります。Depending on the results of monitoring and analysis, the plan should be forced or the user should find another way to optimize the query, such as rewriting it. データベース エンジンDatabase Engine 最適なプランを適用できる必要があるため、手動で強制されたプランを強制的に強制しないようにする必要があります。Manually forced plans should not be forced forever, because the データベース エンジンDatabase Engine should be able to apply optimal plans. ユーザーまたは DBA は、最終的にはプロシージャを使用してプランを強制解除し、最適なプランを検索できるようにする必要があり sp_query_store_unforce_plan データベース エンジンDatabase Engine ます。The user or DBA should eventually unforce the plan using sp_query_store_unforce_plan procedure, and let the データベース エンジンDatabase Engine find the optimal plan.

ヒント

または、[ 強制されたプランを含むクエリ クエリストア] ビューを使用して、プランを検索して強制しないようにします。Alternatively, use the Queries With Forced Plans Query Store view to locate and unforce plans.

SQL ServerSQL Server クエリストアのパフォーマンスを監視し、問題を修正するために必要なすべてのビューと手順について説明します。provides all necessary views and procedures required to monitor performance and fix problems in Query Store.

では SQL Server 2016 (13.x)SQL Server 2016 (13.x) 、クエリストアシステムビューを使用して、プラン選択の回帰を見つけることができます。In SQL Server 2016 (13.x)SQL Server 2016 (13.x), you can find plan choice regressions using Query Store system views. 以降では、によって、 SQL Server 2017 (14.x) データベース エンジンDatabase Engine プランの選択の回帰の可能性が検出され、 sys.dm_db_tuning_recommendations (transact-sql) DMV で適用される推奨の操作が示されます。Starting with SQL Server 2017 (14.x), the データベース エンジンDatabase Engine detects and shows potential plan choice regressions and the recommended actions that should be applied in the sys.dm_db_tuning_recommendations (Transact-SQL) DMV. DMV には、問題に関する情報、問題の重要度、および特定されたクエリ、低下したプランの ID、比較の基準として使用されたプランの ID、および Transact-SQLTransact-SQL 問題を解決するために実行できるステートメントなどの詳細が表示されます。The DMV shows information about the problem, the importance of the issue, and details such as the identified query, the ID of the regressed plan, the ID of the plan that was used as baseline for comparison, and the Transact-SQLTransact-SQL statement that can be executed to fix the problem.

typetype descriptiondescription DATETIMEdatetime scorescore detailsdetails ......
FORCE_LAST_GOOD_PLAN CPU 時間が4ミリ秒から14ミリ秒に変更されましたCPU time changed from 4 ms to 14 ms 3/17/20173/17/2017 8383 queryId recommendedPlanId regressedPlanId T-SQLqueryId recommendedPlanId regressedPlanId T-SQL
FORCE_LAST_GOOD_PLAN CPU 時間が37ミリ秒から84ミリ秒に変更されましたCPU time changed from 37 ms to 84 ms 3/16/20173/16/2017 2626 queryId recommendedPlanId regressedPlanId T-SQLqueryId recommendedPlanId regressedPlanId T-SQL

このビューのいくつかの列について、次の一覧で説明します。Some columns from this view are described in the following list:

  • 推奨される操作の種類 FORCE_LAST_GOOD_PLANType of the recommended action FORCE_LAST_GOOD_PLAN.
  • データベース エンジンDatabase Engineこのプランが変更されたと考えられる場合のパフォーマンスの向上に関する情報が含まれている説明。Description that contains information why the データベース エンジンDatabase Engine thinks that this plan change is a potential performance regression.
  • 可能性のある回帰が検出された日時。Datetime when the potential regression is detected.
  • この推奨事項のスコア。Score of this recommendation.
  • 検出されたプランの ID、低下したプランの id、問題を修正するために必要なプランの ID、 Transact-SQLTransact-SQL 問題を修正するために適用される可能性のあるスクリプトなどの問題について詳しく説明します。詳細は JSON 形式で格納されます。Details about the issues such as ID of the detected plan, ID of the regressed plan, ID of the plan that should be forced to fix the issue, Transact-SQLTransact-SQL script that might be applied to fix the issue, etc. Details are stored in JSON format.

次のクエリを使用して、問題を修正するスクリプトと、推定されるゲインに関する追加情報を取得します。Use the following query to obtain a script that fixes the issue and additional information about the estimated gain:

SELECT reason, score,
      script = JSON_VALUE(details, '$.implementationDetails.script'),
      planForceDetails.*,
      estimated_gain = (regressedPlanExecutionCount + recommendedPlanExecutionCount)
                  * (regressedPlanCpuTimeAverage - recommendedPlanCpuTimeAverage)/1000000,
      error_prone = IIF(regressedPlanErrorCount > recommendedPlanErrorCount, 'YES','NO')
FROM sys.dm_db_tuning_recommendations
CROSS APPLY OPENJSON (Details, '$.planForceDetails')
    WITH (  [query_id] int '$.queryId',
            regressedPlanId int '$.regressedPlanId',
            recommendedPlanId int '$.recommendedPlanId',
            regressedPlanErrorCount int,
            recommendedPlanErrorCount int,
            regressedPlanExecutionCount int,
            regressedPlanCpuTimeAverage float,
            recommendedPlanExecutionCount int,
            recommendedPlanCpuTimeAverage float
          ) AS planForceDetails;

結果セットは次のようになります。Here is the result set.

reasonreason scorescore スクリプトscript クエリ _ idquery_id 現在のプラン _ idcurrent plan_id 推奨されるプラン _ idrecommended plan_id 推定 _ ゲインestimated_gain エラーが発生し _ やすいerror_prone
CPU 時間が3ミリ秒から46ミリ秒に変更されましたCPU time changed from 3 ms to 46 ms 3636 EXEC sp _ クエリ _ ストア _ force _ プラン 12, 17;EXEC sp_query_store_force_plan 12, 17; 1212 2828 1717 11.5911.59 00

列は、現在のプランでは estimated_gain なくクエリの実行に推奨プランを使用する場合に保存される推定秒数を表します。The column estimated_gain represents the estimated number of seconds that would be saved if the recommended plan would be used for query execution instead of the current plan. ゲインが10秒を超える場合は、現在のプランではなく、推奨されるプランを強制する必要があります。The recommended plan should be forced instead of the current plan if the gain is greater than 10 seconds. 現在のプランで、推奨されるプランよりも多くのエラー (タイムアウトや中断された実行など) が発生した場合、列は error_prone 値に設定され YES ます。If there are more errors (for example, time-outs or aborted executions) in the current plan than in the recommended plan, the column error_prone would be set to the value YES. エラーが発生しやすい計画は、現在のプランではなく、推奨プランを強制する必要があるもう1つの理由です。An error prone plan is another reason why the recommended plan should be forced instead of the current one.

には データベース エンジンDatabase Engine 計画選択の回帰を識別するために必要なすべての情報が用意されていますが、継続的な監視とパフォーマンスの問題の修正は面倒なプロセスになることがあります。Although the データベース エンジンDatabase Engine provides all the information required to identify plan choice regressions, continuous monitoring and fixing performance issues might become a tedious process. 自動チューニングでは、このプロセスがはるかに簡単になります。Automatic tuning makes this process much easier.

注意

DMV のデータ sys.dm_db_tuning_recommendations は、インスタンスの再起動間に保持されません SQL ServerSQL ServerData in the sys.dm_db_tuning_recommendations DMV is not persisted between restarts of the SQL ServerSQL Server instance.

インデックスの自動管理Automatic index management

Azure SQL データベースAzure SQL Database は、 Azure SQL データベースAzure SQL Database ワークロードについて学習し、常に最適なインデックスを作成することにより、インデックスの管理が簡単になります。In Azure SQL データベースAzure SQL Database, index management is easy because Azure SQL データベースAzure SQL Database learns about your workload and ensures that your data is always optimally indexed. 適切なインデックスの設計は、ワークロードの最適なパフォーマンスにとって不可欠であり、インデックスの自動管理はインデックスを最適化するのに役立ちます。Proper index design is crucial for optimal performance of your workload, and automatic index management can help you optimize your indexes. インデックスの自動管理では、正しくインデックスが付けられていないデータベースでのパフォーマンスの問題を修正することも、既存のデータベース スキーマのインデックスを維持および改善することもできます。Automatic index management can either fix performance issues in incorrectly indexed databases, or maintain and improve indexes on the existing database schema. での自動チューニングで Azure SQL データベースAzure SQL Database は、次のアクションが実行されます。Automatic tuning in Azure SQL データベースAzure SQL Database performs the following actions:

  • テーブルからデータを読み取るクエリのパフォーマンスを向上させることができるインデックスを識別し Transact-SQLTransact-SQL ます。Identifies indexes that could improve the performance of your Transact-SQLTransact-SQL queries that read data from the tables.
  • 削除される可能性のある長期間使用されなかった冗長なインデックスまたはインデックスを識別します。Identifies redundant indexes or indexes that were not used in longer period of time that could be removed. 不要なインデックスを削除すると、テーブル内のデータを更新するクエリのパフォーマンスが向上します。Removing unnecessary indexes improves the performance of queries that update data in tables.

インデックスの管理が必要な理由Why do you need index management?

インデックスを使用すると、テーブルからデータを読み取るクエリの一部が高速化されますが、データを更新するクエリの速度が低下する可能性があります。Indexes speed up some of your queries that read data from the tables, however they can slow down the queries that update data. インデックスを作成するタイミングと、インデックスに含める必要がある列を慎重に分析する必要があります。You need to carefully analyze when to create an index and what columns you need to include in the index. 一部のインデックスはしばらくすると必要でなくなる場合があります。Some indexes might not be needed after some time. そのため、利点が得られないインデックスを定期的に特定して削除する必要があります。Therefore, you would need to periodically identify and drop these indexes that do not bring any benefits. 未使用のインデックスを無視すると、データを読み取るクエリの恩恵を受けることなく、データを更新するクエリのパフォーマンスが低下します。If you ignore the unused indexes, performance of the queries that update data would be decreased without any benefit to the queries that read data. また、未使用のインデックスはシステムの全体のパフォーマンスに影響します。これは、追加の更新に不要なログが必要になるためです。Unused indexes also affect overall performance of the system because additional updates require unnecessary logging.

テーブルからデータを読み取るクエリのパフォーマンスを向上させ、更新への影響を最小限に抑える最適なインデックスのセットを見つけるには、継続的で複雑な分析が必要になる場合があります。Finding the optimal set of indexes that improve performance of the queries that read data from your tables and have minimal impact on updates might require continuous and complex analysis.

Azure SQL データベースAzure SQL Database では、クエリを分析し、現在のワークロードに最適なインデックスを特定し、削除が必要になる可能性のあるインデックスを識別する、組み込みのインテリジェンスおよび高度なルールを使用します。uses built-in intelligence and advanced rules that analyze your queries, identify indexes that would be optimal for your current workloads, and identify the indexes that might need to be removed. Azure SQL Database を使用すると、他のクエリへの影響を最小限に抑えながら、データを読み取るクエリを最適化するために必要な最小限のインデックスセットが確保されます。Azure SQL Database ensures that you have a minimal necessary set of indexes that optimize the queries that read data, with minimized impact on the other queries.

インデックスの自動管理Automatic index management

検出に加え、で Azure SQL データベースAzure SQL Database は、特定された推奨事項を自動的に適用することができます。In addition to detection, Azure SQL データベースAzure SQL Database can automatically apply identified recommendations. 組み込みのルールによってデータベースのパフォーマンスが向上する場合は、インデックスを自動的に管理することができ Azure SQL データベースAzure SQL Database ます。If you find that the built-in rules improve the performance of your database, you might let Azure SQL データベースAzure SQL Database automatically manage your indexes.

で自動チューニングを有効に Azure SQL データベースAzure SQL Database し、自動チューニング機能でワークロードを完全に管理できるようにするには、「 Azure portal を使用した Azure SQL Database での自動チューニングの有効化」を参照してください。To enable automatic tuning in Azure SQL データベースAzure SQL Database and allow the automatic tuning feature to fully manage your workload, see Enable automatic tuning in Azure SQL Database using Azure portal.

Azure SQL データベースAzure SQL Database CREATE index または DROP INDEX 推奨設定を適用すると、インデックスの影響を受けるクエリのパフォーマンスが自動的に監視されます。When the Azure SQL データベースAzure SQL Database applies a CREATE INDEX or DROP INDEX recommendation, it automatically monitors the performance of the queries that are affected by the index. 影響を受けるクエリのパフォーマンスが向上した場合にのみ、新しいインデックスが保持されます。New index will be retained only if performances of the affected queries are improved. インデックスが存在しないために実行速度が遅いクエリがある場合、削除されたインデックスは自動的に再作成されます。Dropped index will be automatically re-created if there are some queries that run slower due to the absence of the index.

インデックスの自動管理に関する考慮事項Automatic index management considerations

で必要なインデックスを作成するために必要な操作は Azure SQL データベースAzure SQL Database 、リソースを消費する可能性があり、ワークロードのパフォーマンスに影響を一時的にます。Actions required to create necessary indexes in Azure SQL データベースAzure SQL Database might consume resources and temporally affect workload performance. インデックスの作成によるワークロードのパフォーマンスへの影響を最小限に抑えるため、では、 Azure SQL データベースAzure SQL Database 任意のインデックス管理操作に適した時間枠が検索されます。To minimize the impact of index creation on workload performance, Azure SQL データベースAzure SQL Database finds an appropriate time window for any index management operation. チューニングアクションは、データベースがワークロードを実行するためのリソースを必要とし、メンテナンスタスクに使用できる未使用のリソースがデータベースにある場合に再起動されると、延期されます。Tuning action is postponed if the database needs resources to execute your workload, and is restarted when the database has enough unused resources that can be used for the maintenance task. インデックスの自動管理の 1 つの重要な機能は、アクションの検証です。One important feature in automatic index management is a verification of the actions. Azure SQL データベースAzure SQL Database インデックスを作成または削除すると、監視プロセスによってワークロードのパフォーマンスが分析され、アクションによって全体的なパフォーマンスが向上したことが確認されます。When Azure SQL データベースAzure SQL Database creates or drops an index, a monitoring process analyzes the performance of your workload to verify that the action improved the overall performance. 大幅な改善が行われなかった場合は、すぐに操作が元に戻されます。If it did not bring significant improvement - the action is immediately reverted. これに Azure SQL データベースAzure SQL Database より、自動チューニングアクションがワークロードのパフォーマンスに悪影響を与えないようにします。This way, Azure SQL データベースAzure SQL Database ensures that automatic tuning actions do not negatively impact the performance of your workload. 自動チューニングによって作成されたインデックスは、基になるスキーマでのメンテナンス操作に対して透過的です。Indexes created by automatic tuning are transparent for the maintenance operation on the underlying schema. 自動的に作成されたインデックスがあることで、列の削除や名前変更などのスキーマ変更がブロックされることはありません。Schema changes such as dropping or renaming columns are not blocked by the presence of automatically created indexes. によって自動的に作成されたインデックス Azure SQL データベースAzure SQL Database は、関連するテーブルまたは列が削除されるとすぐに削除されます。Indexes that are automatically created by Azure SQL データベースAzure SQL Database are immediately dropped when the related table or columns are dropped.

代替-手動によるインデックス管理Alternative - manual index management

自動インデックス管理を使用しない場合、ユーザーまたは DBA は、 transact-sql) ビューに手動で (sys.dm_db_missing_index_details クエリを実行するか、のパフォーマンスダッシュボードレポートを使用し Management StudioManagement Studio て、パフォーマンスを向上させる可能性のあるインデックスを検索し、このビューに示された詳細を使用してインデックスを作成し、クエリのパフォーマンスを手動で監視する必要があります。Without automatic index management, a user or DBA would need to manually query the sys.dm_db_missing_index_details (Transact-SQL) view or use the Performance Dashboard report in Management StudioManagement Studio to find indexes that might improve performance, create indexes using the details provided in this view, and manually monitor the performance of the query. 削除する必要があるインデックスを見つけるために、ユーザーはインデックスの操作の使用状況の統計を監視して、使用頻度の低いインデックスを検索する必要があります。In order to find the indexes that should be dropped, users should monitor operational usage statistics of the indexes to find rarely used indexes.

Azure SQL データベースAzure SQL Database このプロセスを簡略化します。simplifies this process. Azure SQL データベースAzure SQL Database ワークロードを分析し、新しいインデックスを使用してより高速に実行できるクエリを識別し、未使用または重複したインデックスを識別します。analyzes your workload, identifies the queries that could be executed faster with a new index, and identifies unused or duplicated indexes. 変更する必要があるインデックスの識別の詳細については、「Azure Portal を使用した SQL Database Advisor」参照してください。Find more information about identification of indexes that should be changed at Find index recommendations in Azure portal.

参照See Also

ALTER DATABASE SET AUTOMATIC_TUNING (Transact-sql) ALTER DATABASE SET AUTOMATIC_TUNING (Transact-SQL)
sys.database_automatic_tuning_options (Transact-sql)sys.database_automatic_tuning_options (Transact-SQL)
sys.dm_db_tuning_recommendations (Transact-sql) sys.dm_db_tuning_recommendations (Transact-SQL)
sys.dm_db_missing_index_details (Transact-sql) sys.dm_db_missing_index_details (Transact-SQL)
sp_query_store_force_plan (Transact-sql) sp_query_store_force_plan (Transact-SQL)
sp_query_store_unforce_plan (Transact-sql) sp_query_store_unforce_plan (Transact-SQL)
sys.database_query_store_options (Transact-sql) sys.database_query_store_options (Transact-SQL)
JSON 関数 JSON functions
実行プラン Execution Plans
パフォーマンスの監視とチューニング Monitor and Tune for Performance
パフォーマンス監視およびチューニング ツール Performance Monitoring and Tuning Tools
クエリのストアを使用した、パフォーマンスの監視Monitoring Performance By Using the Query Store
クエリ調整アシスタントQuery Tuning Assistant