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

適用対象:Azure SQL Database

Azure SQL Database は、ご使用のアプリケーションを学習して適応します。 Azure SQL Database には、パフォーマンスを最大化するためのカスタマイズされた推奨事項を提供するデータベース アドバイザーが多数用意されています。 これらのデータベース アドバイザーでは、使用履歴の評価と分析が継続的に実行され、パフォーマンスの向上に役立つワークロード パターンに基づく推奨事項が提供されます。

パフォーマンスの概要

Azure portal の[パフォーマンスの概要] では、データベースのパフォーマンスの概要が表示されるため、パフォーマンスのチューニングとトラブルシューティングに役立ちます。

  • [推奨事項] タイルがある場合、データベースのチューニングに関する推奨事項の内訳が表示されます。 このタイルを選択すると、[パフォーマンスの推奨事項] が表示されます。
  • [Tuning activity] タイルには、データベースに対して進行中のチューニング操作と完了したチューニング操作の概要が表示され、チューニング操作の履歴を簡単に確認できます。 このタイルを選択すると、推奨事項とデータベースのチューニング履歴が表示されます。 詳細については、自動チューニングに関するページを参照してください。
  • [Auto-tuning](自動チューニング) タイルには、データベースの 自動チューニング構成 (データベースに自動的に適用されるチューニング オプション) が表示されます。 このタイルを選択すると、自動構成のダイアログが開きます。 データベース インデックスとクエリ実行プランの自動チューニングの詳細については、自動チューニングに関するページを参照してください。
  • [Database queries] タイルには、データベースのクエリ パフォーマンスの概要 (全体的な DTU 使用量と上位のリソース消費に関するクエリ) が表示されます。 このタイルを選択すると、[Query Performance Insight] が表示されます。
  • 既定のグラフには、過去 24 時間のデータベース アクティビティの概要と、より新しいアクティビティをズームするためのオプションが表示されます。 積み上げ横棒グラフでは、CPU 別に上位のクエリを分析し、複数の線グラフは CPU、データ I/O、ログ I/O 別のワークロードを表します。 グラフ内の個々の積み上げ横棒を選択します。それぞれがキャッシュされたクエリ プランを表します。 [Query Performance Insight] ページを詳しく調べ、ワークロードで最もコストの高いクエリを特定します。 詳細については、Query Performance Insight に関するページを参照してください。

Azure SQL データベースの Azure portal ナビゲーション メニューの インテリジェント パフォーマンスのパフォーマンスの概要ページに移動します。

Screenshot from the Azure portal of the Performance Overview for Azure SQL Database.

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

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

パフォーマンスに関する推奨事項 単一データベースとプールされたデータベースのサポート インスタンス データベースのサポート
インデックスの作成に関する推奨事項 - ワークロードのパフォーマンスを向上させることができるインデックスの作成を推奨します。 はい いいえ
インデックスの削除に関する推奨事項 - 一意なインデックスを除く冗長なインデックスや重複するインデックスの日次削除、また長期間 (90 日より長い期間) 使用されていないインデックスの削除を推奨します。> なお、このオプションはパーティション切り替えやインデックス ヒントを使用するアプリケーションと互換性がありません。 Premium および Business Critical サービスレベルでは、使われていないインデックスの削除はサポートされていません。 はい いいえ
クエリのパラメーター化に関する推奨事項 (プレビュー) - 継続的に再コンパイルされてはいるもののクエリ実行プランが同じままのクエリが 1 つ以上ある場合、強制パラメーター化を推奨します。 はい いいえ
スキーマの問題の修正に関する推奨事項 (プレビュー) - データベースで発生したスキーマ関連の SQL エラー数が異常であることが Azure SQL Database で検出すると、スキーマの修正の推奨事項が表示されます。 Microsoft は、現在、"スキーマの問題の修正" に関する推奨事項を廃止しているところです。 はい いいえ

A screenshot from the Azure portal showing sample performance recommendations for Azure SQL Database.

パフォーマンスに関する推奨事項を適用するには、「推奨事項の適用」を参照してください。 推奨事項の状態を表示するには、「監視操作」を参照してください。

また、過去に適用されたチューニング アクションの履歴すべてを表示することもできます。

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

Azure SQL Database は、実行されるクエリを継続的に監視し、パフォーマンスを改善する可能性があるインデックスを特定します。 特定のインデックスが欠落していることが確実になると、新しいインデックスの作成推奨事項が作成されます。

Azure SQL Database は、一定の期間後にインデックスがもたらすパフォーマンス増加を見積もることで確信度を高めます。 見積もられたパフォーマンス増加に基づき、推奨事項は高、中、低で分類されます。

推奨事項を利用して作成されたインデックスには常に auto_created というフラグが設定されます。 sys.indexes ビューを見ることで、どのインデックスが自動作成されたかを確認できます。 自動作成されたインデックスによる ALTER/RENAME コマンドのブロックは発生しません。

auto-created インデックスが設定されている列を削除しようとすると、コマンドは成功します。 auto-created インデックスもこのコマンドによって削除されます。 通常のインデックスは、インデックスが付けられた列の ALTER/RENAME コマンドをブロックします。

インデックスの作成に関する推奨事項が適用されると、Azure SQL Database はクエリのパフォーマンスをベースライン パフォーマンスと比較します。 新しいインデックスによってパフォーマンスが向上した場合、その推奨事項には成功のフラグが設定され、影響レポートが生成されます。 インデックスによってパフォーマンスが向上しなかった場合、インデックスは自動的に元に戻されます。 Azure SQL Database は、このプロセスを使用して、推奨事項が確実にデータベース パフォーマンスを向上するようにします。

インデックスの作成に関する推奨事項にはバックオフ ポリシーがあります。データベースまたはプールのリソース使用率が高すぎる場合、推奨事項は適用されません。 バックオフ ポリシーでは、CPU、データ IO、ログ IO、および使用可能な記憶領域が考慮されます。

CPU、データ IO、ログ IO が直前の 30 分間で 80% を超えている場合、インデックス作成の推奨事項は延期されます。 インデックスの作成により使用可能な記憶領域が 10% を下回る場合は、推奨事項がエラー状態に変わります。 数日経っても、自動チューニングによってインデックスが有効であると判断された場合、プロセスが再び開始されます。

このプロセスは、インデックスの作成に十分な使用可能領域がある限り、またはインデックスが有効でないと見なさるまで繰り返されます。

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

足りないインデックスの検出だけでなく、Azure SQL Database は既存インデックスのパフォーマンスを継続的に分析します。 インデックスが使用されない場合、Azure SQL Database はその削除を推奨します。 インデックスの削除は 2 つの場合に推奨されます。

  • インデックスが別のインデックスと重複している場合 (同じインデックスを付けて追加された列、パーティション スキーマ、フィルター)
  • インデックスが長期間 (>90 日) 使用されていない場合

インデックスの削除に関する推奨事項は、実施後に検証も通過します。 パフォーマンスが改善されると、影響レポートが入手可能になります。 パフォーマンスが低下すると、推奨事項が元に戻されます。

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

継続的に再コンパイルされてはいるもののクエリ実行プランが同じままのクエリが 1 つ以上あると、クエリのパラメーター化に関する推奨事項が表示されます。 この条件によって、強制パラメーター化を適用する機会が生成されます。 強制パラメーター化では、クエリ プランをキャッシュして将来再利用できるようになり、パフォーマンスが向上し、リソース使用率が削減されます。

すべてのクエリは、実行プランの生成のために、最初にコンパイルされる必要があります。 生成された各プランがプラン キャッシュに追加されます。 同じクエリのその後の実行では、キャッシュからプランを再利用できるため、追加のコンパイルの必要がなくなります。

パラメーター化されていない値を含むクエリは、パフォーマンスのオーバーヘッドにつながる可能性があります。パラメーター化されていない値が異なるたびに、実行プランが再コンパイルされるためです。 多くの場合、パラメーター値の異なる同じクエリによって同一の実行プランが生成されます。 しかし、これらのプランは個別にプラン キャッシュに追加されます。

実行プランを再コンパイルするプロセスにより、データベース リソースが消費され、クエリ実行時間の増加とプラン キャッシュのオーバーフローが発生します。 このようなイベントは、プランがキャッシュから削除される原因となります。 この動作は、データベースで強制パラメーター化のオプションを設定することにより変更できます。

推奨事項が与える影響の予測に役立つよう、実際の CPU 使用率、および予測される CPU 使用率 (推奨事項が適用されたと仮定した場合) の比較が提供されます。 この推奨事項は、CPU 使用率を抑えるために役立ちます。 また、クエリ期間の短縮と、プラン キャッシュのオーバーヘッドの削減にも役立ちます。つまり、キャッシュに残って再利用されるプランが増加することになります。 [適用] コマンドを選択して、迅速にこの推奨事項を適用できます。

この推奨事項を適用すると、数分以内にデータベースで強制パラメーター化が有効になります。 監視プロセスが開始され、約 24 時間続きます。 この期間が終了すると検証レポートを表示できます。 このレポートは、推奨事項の適用前後 24 時間のデータベースの CPU 使用率を示します。 Azure SQL Database Advisor は、パフォーマンスの不具合が検出された場合に、推奨事項の適用を自動的に元に戻す安全メカニズムを備えています。

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

重要

Microsoft は、現在、"スキーマの問題の修正" に関する推奨事項を廃止しているところです。 かつて "スキーマの問題の修正" 推奨事項で扱っていたスキーマの問題を含め、データベース パフォーマンスの問題を監視するには、Intelligent Insights の使用をお勧めします。

Azure SQL Database によって、データベースで発生したスキーマ関連の SQL エラー数が異常であることが検出されると、 [スキーマの問題の修正] 推奨事項が表示されます。 この推奨事項は、通常、データベースでスキーマ関連のエラー (無効な列名、無効なオブジェクト名など) が 1 時間に複数件発生した場合に表示されます。

"スキーマの問題" は構文エラーの一種です。 SQL クエリの定義とデータベース スキーマの定義が合っていないときに発生します。 たとえば、クエリで想定される列の 1 つがターゲット テーブルで見つからない、またはその逆の場合です。

Azure SQL Database によって、データベースで発生したスキーマ関連の SQL エラー数が異常であることが検出されると、"スキーマの問題の修正" 推奨事項が表示されます。 下の表は、スキーマの問題に関連したエラーを示しています。

SQL エラー コード Message
201 プロシージャまたは関数 ' ' にはパラメーター ' ' が必要ですが、指定されませんでした。
207 列名 '*' が無効です。
208 オブジェクト名 '*' が無効です。
213 列名または指定された値の数がテーブルの定義と一致しません。
2812 ストアド プロシージャ '*' が見つかりませんでした。
8144 プロシージャまたは関数 * に指定された引数が多すぎます。

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

開発者は、Azure SQL Database のパフォーマンスに関する推奨事項に基づいて、カスタム アプリケーションの開発を検討する場合があります。 データベースのポータルに一覧表示されているすべての推奨事項には、Get-AzSqlDatabaseRecommendedAction API を介してアクセスできます。

次のステップ

  • データベース インデックスとクエリ実行プランの自動チューニングについては、Azure SQL Database の自動チューニングに関するページを参照してください。
  • パフォーマンスの問題の自動診断および根本原因分析を含むデータベース パフォーマンスの自動監視については、Azure SQL Intelligent Insights に関するページを参照してください。
  • よく使用されるクエリによるパフォーマンスへの影響を確認する方法については、クエリ パフォーマンスの洞察に関する記事をご覧ください。