Azure SQL Database のデータベース アドバイザーのパフォーマンスに関する推奨事項Database Advisor performance recommendations for Azure SQL Database

適用対象: Azure SQL Database

Azure SQL Database は、ご使用のアプリケーションを学習して適応します。Azure SQL Database learns and adapts with your application. Azure SQL Database には、パフォーマンスを最大化するためのカスタマイズされた推奨事項を提供するデータベース アドバイザーが多数用意されています。Azure SQL Database has a number of database advisors that provide customized recommendations that enable you to maximize performance. これらのデータベース アドバイザーでは、使用履歴の評価と分析が継続的に実行され、パフォーマンスの向上に役立つワークロード パターンに基づく推奨事項が提供されます。These database advisors continuously assess and analyze the usage history and provide recommendations based on workload patterns that help improve performance.

パフォーマンスの概要Performance overview

パフォーマンスの概要では、データベースのパフォーマンスの概要について説明します。パフォーマンスのチューニングとトラブルシューティングを行う際に役立ちます。Performance overview provides a summary of your database performance, and helps you with performance tuning and troubleshooting.

Azure SQL Database のパフォーマンスの概要

  • [推奨事項] タイルには、データベースのチューニングに関する推奨事項の内訳が表示されます (推奨事項が 4 つ以上ある場合は、上から 3 番目までが表示されます)。The Recommendations tile provides a breakdown of tuning recommendations for your database (top three recommendations are shown if there are more). このタイルをクリックすると、 [パフォーマンスの推奨事項] が表示されます。Clicking this tile takes you to Performance recommendation options.
  • [Tuning activity] タイルには、データベースに対して進行中のチューニング操作と完了したチューニング操作の概要が表示され、チューニング操作の履歴を簡単に確認できます。The Tuning activity tile provides a summary of the ongoing and completed tuning actions for your database, giving you a quick view into the history of tuning activity. このタイルをクリックすると、データベースのチューニング履歴がすべて表示されます。Clicking this tile takes you to the full tuning history view for your database.
  • [Auto-tuning](自動チューニング) タイルには、データベースの 自動チューニング構成 (データベースに自動的に適用されるチューニング オプション) が表示されます。The Auto-tuning tile shows the auto-tuning configuration for your database (tuning options that are automatically applied to your database). このタイルをクリックすると、自動構成のダイアログが開きます。Clicking this tile opens the automation configuration dialog.
  • [Database queries] タイルには、データベースのクエリ パフォーマンスの概要 (全体的な DTU 使用量と上位のリソース消費に関するクエリ) が表示されます。The Database queries tile shows the summary of the query performance for your database (overall DTU usage and top resource consuming queries). このタイルをクリックすると、 [Query Performance Insight] が表示されます。Clicking this tile takes you to Query Performance Insight.

パフォーマンスに関する推奨事項のオプションPerformance recommendation options

Azure SQL Database で使用できるパフォーマンスに関する推奨事項のオプションは次のとおりです。Performance recommendation options available in Azure SQL Database are:

パフォーマンスに関する推奨事項Performance recommendation 単一データベースとプールされたデータベースのサポートSingle database and pooled database support インスタンス データベースのサポートInstance database support
インデックスの作成に関する推奨事項 - ワークロードのパフォーマンスを向上させることができるインデックスの作成を推奨します。Create index recommendations - Recommends creation of indexes that may improve performance of your workload. はいYes いいえNo
インデックスの削除に関する推奨事項 - 一意なインデックスを除く冗長なインデックスや重複するインデックスの日次削除、また長期間 (90 日超) 使用されていないインデックスの削除を推奨します。Drop index recommendations - Recommends removal of redundant and duplicate indexes daily, except for unique indexes, and indexes that were not used for a long time (>90 days). なお、このオプションはパーティション切り替えやインデックス ヒントを使用するアプリケーションと互換性がありません。Please note that this option is not compatible with applications using partition switching and index hints. Premium および Business Critical サービスレベルでは、使われていないインデックスの削除はサポートされていません。Dropping unused indexes is not supported for Premium and Business Critical service tiers. はいYes いいえNo
クエリのパラメーター化に関する推奨事項 (プレビュー) - 継続的に再コンパイルされてはいるもののクエリ実行プランが同じままのクエリが 1 つ以上ある場合、強制パラメーター化を推奨します。Parameterize queries recommendations (preview) - Recommends forced parameterization in cases when you have one or more queries that are constantly being recompiled but end up with the same query execution plan. はいYes いいえNo
スキーマの問題の修正に関する推奨事項 (プレビュー) - データベースで発生したスキーマ関連の SQL エラー数が異常であることが Azure SQL Database で検出すると、スキーマの修正の推奨事項が表示されます。Fix schema issues recommendations (preview) - Recommendations for schema correction appear when Azure SQL Database notices an anomaly in the number of schema-related SQL errors that are happening on your database. Microsoft は、現在、"スキーマの問題の修正" に関する推奨事項を廃止しているところです。Microsoft is currently deprecating "Fix schema issue" recommendations. はいYes いいえNo

Azure SQL Database のパフォーマンスに関する推奨事項

パフォーマンスに関する推奨事項を適用するには、「推奨事項の適用」を参照してください。To apply performance recommendations, see applying recommendations. 推奨事項の状態を表示するには、「監視操作」を参照してください。To view the status of recommendations, see Monitoring operations.

また、過去に適用されたチューニング アクションの履歴すべてを表示することもできます。You can also find complete history of tuning actions that were applied in the past.

インデックスの作成に関する推奨事項Create index recommendations

Azure SQL Database は、実行されるクエリを継続的に監視し、パフォーマンスを改善する可能性があるインデックスを特定します。Azure SQL Database continuously monitors the queries that are running and identifies the indexes that could improve performance. 特定のインデックスが欠落していることが確実になると、新しい インデックスの作成 推奨事項が作成されます。After there's enough confidence that a certain index is missing, a new Create index recommendation is created.

Azure SQL Database は、一定の期間後にインデックスがもたらすパフォーマンス増加を見積もることで確信度を高めます。Azure SQL Database builds confidence by estimating the performance gain the index would bring through time. 見積もられたパフォーマンス増加に基づき、推奨事項は高、中、低で分類されます。Depending on the estimated performance gain, recommendations are categorized as high, medium, or low.

推奨事項を利用して作成されたインデックスには常に auto_created というフラグが設定されます。Indexes that are created by using recommendations are always flagged as auto-created indexes. sys.indexes ビューを見ることで、どのインデックスが自動作成されたかを確認できます。You can see which indexes are auto-created by looking at the sys.indexes view. 自動作成されたインデックスによる ALTER/RENAME コマンドのブロックは発生しません。Auto-created indexes don't block ALTER/RENAME commands.

auto-created インデックスが設定されている列を削除しようとすると、コマンドは成功します。If you try to drop the column that has an auto-created index over it, the command passes. auto-created インデックスもこのコマンドによって削除されます。The auto-created index is dropped with the command as well. 通常のインデックスは、インデックスが付けられた列の ALTER/RENAME コマンドをブロックします。Regular indexes block the ALTER/RENAME command on columns that are indexed.

インデックスの作成に関する推奨事項が適用されると、Azure SQL Database はクエリのパフォーマンスをベースライン パフォーマンスと比較します。After the create index recommendation is applied, Azure SQL Database compares the performance of the queries with the baseline performance. 新しいインデックスによってパフォーマンスが向上した場合、推奨事項が成功したというフラグが設定され、影響レポートが生成されます。If the new index improved performance, the recommendation is flagged as successful and the impact report is available. インデックスによってパフォーマンスが向上しなかった場合、インデックスは自動的に元に戻されます。If the index didn't improve performance, it's automatically reverted. Azure SQL Database は、このプロセスを使用して、推奨事項が確実にデータベース パフォーマンスを向上するようにします。Azure SQL Database uses this process to ensure that recommendations improve database performance.

インデックスの作成 に関する推奨事項にはバックオフ ポリシーがあります。データベースまたはプールのリソース使用率が高すぎる場合、推奨事項は適用されません。Any create index recommendation has a back-off policy that doesn't allow applying the recommendation if the resource usage of a database or pool is high. バックオフ ポリシーでは、CPU、データ IO、ログ IO、および使用可能な記憶領域が考慮されます。The back-off policy takes into account CPU, Data IO, Log IO, and available storage.

CPU、データ IO、ログ IO が直前の 30 分間で 80% を超えている場合、インデックス作成の推奨事項は延期されます。If CPU, data IO, or log IO is higher than 80% in the previous 30 minutes, the create index recommendation is postponed. インデックスの作成により使用可能な記憶領域が 10% を下回る場合は、推奨事項がエラー状態に変わります。If the available storage will be below 10% after the index is created, the recommendation goes into an error state. 数日後に自動チューニングを行ってインデックスが有効であると示される場合には、プロセスが再び開始します。If, after a couple of days, automatic tuning still believes that the index would be beneficial, the process starts again.

このプロセスは、インデックスの作成に十分な使用可能領域がある限り、またはインデックスが有効でないと見なさるまで繰り返されます。This process repeats until there's enough available storage to create an index, or until the index isn't seen as beneficial anymore.

インデックスの削除に関する推奨事項Drop index recommendations

足りないインデックスの検出だけでなく、Azure SQL Database は既存インデックスのパフォーマンスを継続的に分析します。Besides detecting missing indexes, Azure SQL Database continuously analyzes the performance of existing indexes. インデックスが使用されない場合、Azure SQL Database はその削除を推奨します。If an index is not used, Azure SQL Database recommends dropping it. インデックスの削除は 2 つの場合に推奨されます。Dropping an index is recommended in two cases:

  • インデックスが別のインデックスと重複している場合 (同じインデックスを付けて追加された列、パーティション スキーマ、フィルター)The index is a duplicate of another index (same indexed and included column, partition schema, and filters).
  • インデックスが長期間 (93 日) 使用されていない場合The index hasn't been used for a prolonged period (93 days).

インデックスの削除に関する推奨事項は、実施後に検証も通過します。Drop index recommendations also go through the verification after implementation. パフォーマンスが改善されると、影響レポートが入手可能になります。If the performance improves, the impact report is available. パフォーマンスが低下すると、推奨事項が元に戻されます。If performance degrades, the recommendation is reverted.

クエリのパラメーター化に関する推奨事項 (プレビュー)Parameterize queries recommendations (preview)

継続的に再コンパイルされてはいるもののクエリ実行プランが同じままのクエリが 1 つ以上あると、クエリのパラメーター化 に関する推奨事項が表示されます。Parameterize queries recommendations appear when you have one or more queries that are constantly being recompiled but end up with the same query execution plan. この条件によって、強制パラメーター化を適用する機会が生成されます。This condition creates an opportunity to apply forced parameterization. 強制パラメーター化では、クエリ プランをキャッシュして将来再利用できるようになり、パフォーマンスが向上し、リソース使用率が削減されます。Forced parameterization, in turn, allows query plans to be cached and reused in the future, which improves performance and reduces resource usage.

すべてのクエリは、実行プランの生成のために、最初にコンパイルされる必要があります。Every query initially needs to be compiled to generate an execution plan. 生成された各プランがプラン キャッシュに追加されます。Each generated plan is added to the plan cache. 同じクエリのその後の実行では、キャッシュからプランを再利用できるため、追加のコンパイルの必要がなくなります。Subsequent executions of the same query can reuse this plan from the cache, which eliminates the need for additional compilation.

パラメーター化されていない値を含むクエリは、パフォーマンスのオーバーヘッドにつながる可能性があります。パラメーター化されていない値が異なるたびに、実行プランが再コンパイルされるためです。Queries with non-parameterized values can lead to performance overhead because the execution plan is recompiled each time the non-parameterized values are different. 多くの場合、パラメーター値の異なる同じクエリによって同一の実行プランが生成されます。In many cases, the same queries with different parameter values generate the same execution plans. しかし、これらのプランは個別にプラン キャッシュに追加されます。These plans, however, are still separately added to the plan cache.

実行プランを再コンパイルするプロセスにより、データベース リソースが消費され、クエリ実行時間の増加とプラン キャッシュのオーバーフローが発生します。The process of recompiling execution plans uses database resources, increases the query duration time, and overflows the plan cache. このようなイベントは、プランがキャッシュから削除される原因となります。These events, in turn, cause plans to be evicted from the cache. この動作は、データベースで強制パラメーター化のオプションを設定することにより変更できます。This behavior can be altered by setting the forced parameterization option on the database.

推奨事項が与える影響の予測に役立つよう、実際の CPU 使用率、および予測される CPU 使用率 (推奨事項が適用されたと仮定した場合) の比較が提供されます。To help you estimate the impact of this recommendation, you are provided with a comparison between the actual CPU usage and the projected CPU usage (as if the recommendation were applied). この推奨事項は、CPU 使用率を抑えるために役立ちます。This recommendation can help you gain CPU savings. また、クエリ期間の短縮と、プラン キャッシュのオーバーヘッドの削減にも役立ちます。つまり、キャッシュに残って再利用されるプランが増加することになります。It can also help you decrease query duration and overhead for the plan cache, which means that more of the plans can stay in the cache and be reused. [適用] コマンドを選択して、迅速にこの推奨事項を適用できます。You can apply this recommendation quickly by selecting the Apply command.

この推奨事項を適用すると、数分以内にデータベースで強制パラメーター化が有効になります。After you apply this recommendation, it enables forced parameterization within minutes on your database. 監視プロセスが開始され、約 24 時間続きます。It starts the monitoring process, which lasts for approximately 24 hours. この期間が終了すると検証レポートを表示できます。After this period, you can see the validation report. このレポートは、推奨事項の適用前後 24 時間のデータベースの CPU 使用率を示します。This report shows the CPU usage of your database 24 hours before and after the recommendation has been applied. Azure SQL Database Advisor は、パフォーマンスの不具合が検出された場合に、推奨事項の適用を自動的に元に戻す安全メカニズムを備えています。Azure SQL Database Advisor has a safety mechanism that automatically reverts the applied recommendation if performance regression has been detected.

スキーマの問題の修正に関する推奨事項 (プレビュー)Fix schema issues recommendations (preview)

重要

Microsoft は、現在、"スキーマの問題の修正" に関する推奨事項を廃止しているところです。Microsoft is currently deprecating "Fix schema issue" recommendations. かつて "スキーマの問題の修正" 推奨事項で扱っていたスキーマの問題を含め、データベース パフォーマンスの問題を監視するには、Intelligent Insights の使用をお勧めします。We recommend that you use Intelligent Insights to monitor your database performance issues, including schema issues that the "Fix schema issue" recommendations previously covered.

Azure SQL Database によって、データベースで発生したスキーマ関連の SQL エラー数が異常であることが検出されると、 [スキーマの問題の修正] 推奨事項が表示されます。Fix schema issues recommendations appear when Azure SQL Database notices an anomaly in the number of schema-related SQL errors that are happening on your database. この推奨事項は、通常、データベースでスキーマ関連のエラー (無効な列名、無効なオブジェクト名など) が 1 時間に複数件発生した場合に表示されます。This recommendation typically appears when your database encounters multiple schema-related errors (invalid column name, invalid object name, and so on) within an hour.

"スキーマの問題" は構文エラーの一種です。"Schema issues" are a class of syntax errors. SQL クエリの定義とデータベース スキーマの定義が合っていないときに発生します。They occur when the definition of the SQL query and the definition of the database schema aren't aligned. たとえば、クエリで想定される列の 1 つがターゲット テーブルで見つからない、あるいはその逆の場合です。For example, one of the columns that's expected by the query might be missing in the target table or vice-versa.

Azure SQL Database によって、データベースで発生したスキーマ関連の SQL エラー数が異常であることが検出されると、"スキーマの問題の修正" 推奨事項が表示されます。The "Fix schema issue" recommendation appears when Azure SQL Database notices an anomaly in the number of schema-related SQL errors that are happening on your database. 下の表は、スキーマの問題に関連したエラーを示しています。The following table shows the errors that are related to schema issues:

SQL エラー コードSQL error code MessageMessage
201201 プロシージャまたは関数 ' ' にはパラメーター ' ' が必要ですが、指定されませんでした。Procedure or function '' expects parameter '', which was not supplied.
207207 列名 '*' が無効です。Invalid column name '*'.
208208 オブジェクト名 '*' が無効です。Invalid object name '*'.
213213 列名または指定された値の数がテーブルの定義と一致しません。Column name or number of supplied values does not match table definition.
28122812 ストアド プロシージャ '*' が見つかりませんでした。Could not find stored procedure '*'.
81448144 プロシージャまたは関数 * に指定された引数が多すぎます。Procedure or function * has too many arguments specified.

カスタム アプリケーションCustom applications

開発者は、Azure SQL Database のパフォーマンスに関する推奨事項に基づいて、カスタム アプリケーションの開発を検討する場合があります。Developers might consider developing custom applications using performance recommendations for Azure SQL Database. データベースのポータルに一覧表示されているすべての推奨事項には、Get-AzSqlDatabaseRecommendedAction API を介してアクセスできます。All recommendations listed in the portal for a database can be accessed through Get-AzSqlDatabaseRecommendedAction API.

次のステップNext steps

  • データベース インデックスとクエリ実行プランの自動チューニングについては、Azure SQL Database の自動チューニングに関するページを参照してください。For more information about automatic tuning of database indexes and query execution plans, see Azure SQL Database automatic tuning.
  • パフォーマンスの問題の自動診断および根本原因分析を含むデータベース パフォーマンスの自動監視については、Azure SQL Intelligent Insights に関するページを参照してください。For more information about automatically monitoring database performance with automated diagnostics and root cause analysis of performance issues, see Azure SQL Intelligent Insights.
  • よく使用されるクエリによるパフォーマンスへの影響を確認する方法については、クエリ パフォーマンスの洞察に関する記事をご覧ください。See Query Performance Insights to learn about and view the performance impact of your top queries.