Database Watcher のデータ コレクションとデータセット (プレビュー)
適用対象: Azure SQL Database Azure SQL Managed Instance
Database Watcher は、SQL システム ビューから監視データを収集し、データセットの 形式でデータ ストアに取り込みます。 各データセットは、1 つ以上の SQL システム ビューのデータを使用して形成されます。 データセットごとに、データ ストアに個別のテーブルがあります。
データ コレクション
Database Watcher は、T-SQL クエリを使用して定期的に監視データを収集します。 クエリの各実行で収集されるデータは、サンプルと呼ばれます。 サンプルの収集頻度はデータセットによって異なります。 たとえば、SQL パフォーマンス カウンターなどの頻繁に変更されるデータは 10 秒ごとに収集されますが、データベース構成などのほとんどの静的データは 5 分ごとに収集される場合があります。 詳細については、「データセット」に関するページを参照してください。
Database Watcher は、Azure Data Explorer のストリーミング インジェストとMicrosoft Fabric の Real Time Analytics を利用して、凖リアルタイムの監視を提供します。 通常、収集された SQL 監視データは、10 秒未満でレポートと分析に使用できるようになります。 インジェスト統計リンクを使用して、Database Watcher のダッシュボードでデータ インジェストの待機時間を監視できます。
Database Watcher ワークロードとアプリケーション ワークロード間の相互作用
Database Watcher を有効にすることは、アプリケーションのワークロードに対して観察可能な影響を与える可能性はありません。 通常、より頻繁な監視クエリは 1 秒未満の範囲で実行されますが、大規模なデータセットを返すなど、より多くの時間が必要になる可能性があるクエリは、頻度の低いサイクル間隔で実行されます。
アプリケーション ワークロードへの影響のリスクをさらに軽減するために、Azure SQL データベースのすべての Database Watcher クエリは、内部ワークロードとしてリソース管理されます。 リソースの競合が存在する場合、監視クエリによるリソース消費量は、データベースで使用可能なリソースの合計数のごく一部に制限されます。 これにより、監視クエリよりもアプリケーションのワークロードが優先されます。
Azure SQL リソースで実行されているデータ コレクション ワークロードとデータベース ワークロード間のブロックやデッドロック状態などのコンカレンシーの競合を回避するために、監視クエリでは短い ロック タイムアウトと低いデッドロック優先度が使用されます。 コンカレンシーの競合がある場合は、アプリケーション ワークロード クエリに優先順位が与えられます。 アプリケーションのワークロード パターンによっては、一部のデータセットで収集されたデータに不定期にギャップが生じる可能性があります。
エラスティック プールでのデータ コレクション
エラスティック プールを監視するには、プール内の 1 つのデータベースをアンカー データベースとして指定する必要があります。 Database Watcher はアンカー データベースに接続します。 Watcher はVIEW SERVER PERFORMANCE STATE
アクセス許可を保持するため、アンカー データベースのシステム ビューはプール全体の監視データを提供します。
ヒント
監視する各エラスティック プールに空のデータベースを追加し、アンカー データベースとして指定できます。 これにより、エラスティック プールの監視を中断することなく、プール内外またはプール間で他のデータベースを移動できます。
アンカー データベースから収集されたデータには、プール レベルのメトリックと、プール内のすべてのデータベースの特定のデータベース レベルのパフォーマンス メトリックが含まれます。 たとえば、これには、各データベースのリソース使用率と要求レートメトリックが含まれます。 一部のシナリオでは、エラスティック プール全体を監視すると、プール内の各データベースを監視する必要がなくなります。
プール レベルの CPU、メモリ、ストレージ使用率、待機統計などの特定の監視データは、プール内の個々のデータベースに属性を付けることができないため、Elastic Pool レベルでのみ収集されます。 逆に、クエリ ランタイム統計、データベース プロパティ、テーブル、インデックス メタデータなどのその他の特定のデータは、データベース レベルでのみ使用できます。
エラスティック プールから Database Watcher ターゲットとして個々のデータベースを追加する場合は、エラスティック プールもターゲットとして追加する必要があります。 これにより、データベースとプールのパフォーマンスをより完全に確認できます。
高密度エラスティック プールを監視する
高密度のエラスティック プールには多数のデータベースが含まれていますが、コンピューティング サイズは比較的小さくなります。 この構成により、顧客は、プール内の少数のデータベースのみが同時にアクティブであるという前提で、コンピューティング リソースの割り当てを最小限に抑えることで、大幅なコスト削減を実現できます。
高密度エラスティック プール内の Database Watcher クエリで使用できるコンピューティング リソースは、アプリケーション クエリへの影響を回避するためにさらに制限されます。 このため、Database Watcher は、高密度エラスティック プール内のすべてのデータベースから監視データを収集できない場合があります。
ヒント
高密度エラスティック プールを監視するには、エラスティック プールをターゲットとして追加することで、プール レベルで監視を有効にします。
高密度エラスティック プール内の個々のデータベースをいくつか監視することはお勧めしません。 Database Watcher クエリで使用できるコンピューティング リソースが不足しているため、収集されたデータにギャップが生じる場合や、データ サンプル間の間隔が予想を超える場合があります。
データの保存場所
次の 3 つのデータ ストア タイプのいずれかに、収集された SQL 監視データを保存することを選択できます。
Azure Data Explorer クラスターのデータベース。 既定では、新しい Watcher ごとに新しい Azure Data Explorer クラスターが作成され、Watcher と同じ Azure リージョンに配置されます。
Azure Data Explorer クラスターとデータベースの場所として、Azure 地域内の特定の Azure リージョンを選択できます。 Azure Data Explorer のデータ レプリケーション機能に関する詳細は、「事業継続とディザスター リカバリーの概要」を参照してください。
無料のAzure Data Explorer クラスターのデータベース。
お客様は、特定の Azure 地域を選択できますが、無料の Azure Data Explorer クラスターとデータベースの場所として特定の Azure リージョンを選択することはできません。 別のリージョンまたは地域へのデータ レプリケーションはサポートされていません。
Microsoft Fabric の Real-Time Analytics のデータベース。
データベースの地域の場所を選択することはできません。
収集された SQL 監視データのデータ所在地を完全に制御するには、Azure Data Explorer クラスター上のデータベースをデータ ストアとして選択する必要があります。
また、Azure Data Explorer クラスターの地域とリージョンを、監視対象の Azure SQL リソースの地域とリージョンに合わせることもできます。 Azure SQL リソースが複数のリージョンにある場合、データ所在地の要件を満たすために、複数の Watcher と複数の Azure Data Explorer クラスターを作成する必要がある場合があります。
データセット
このセクションでは、データ ストア内の収集頻度やテーブル名など、ターゲットの種類ごとに使用できるデータセットについて説明します。
注意
プレビュー期間中は、データセットが追加および削除される場合があります。 名前、説明、コレクションの頻度、使用可能な列などのデータセット プロパティは変更される可能性があります。
データセット名 | テーブル名 | 収集頻度 (hh:mm:ss) | 説明 |
---|---|---|---|
アクティブなセッション | sqldb_database_active_sessions |
00:00:30 |
各行は、要求を実行しているセッション、ブロック、または開いているトランザクションを持つセッションを表します。 |
バックアップ履歴 | sqldb_database_sql_backup_history |
00:05:00 |
各行は、正常に完了したデータベース バックアップを表します。 |
変更処理 | sqldb_database_change_processing |
00:01:00 |
各行は、変更データ キャプチャや変更フィード (Azure Synapse Link) などの変更処理機能の集計ログ スキャン統計のスナップショットを表します。 |
変更処理エラー | sqldb_database_change_processing_errors |
00:01:00 |
各行は、変更データ キャプチャや変更フィード (Azure Synapse Link) などの変更処理機能を使用するときに、変更処理中に発生したエラーを表します。 |
接続 | sqldb_database_connectivity |
00:00:30 |
各行は、データベースの接続プローブ (ログインとクエリ) を表します。 |
geo レプリカ | sqldb_database_geo_replicas |
00:00:30 |
各行は、geo レプリケーション メタデータや統計を含むプライマリまたはセカンダリの geo レプリカを表します。 |
インデックス メタデータ | sqldb_database_index_metadata |
00:30:00 |
各行は、インデックス パーティションを表し、インデックスの定義、プロパティ、および操作の統計情報が含まれます。 |
メモリ使用率 | sqldb_database_memory_utilization |
00:00:10 |
各行はメモリ クラークを表し、データベース エンジン インスタンスのクラークによるメモリ消費量が含まれます。 |
欠落したインデックス | sqldb_database_missing_indexes |
00:15:00 |
各行は、作成された場合にクエリのパフォーマンスを向上させる可能性があるインデックスを表します。 |
メモリ不足のイベント | sqldb_database_oom_events |
00:01:00 |
各行は、データベース エンジンのメモリ不足イベントを表します。 |
パフォーマンス カウンター (共通) | sqldb_database_performance_counters_common |
00:00:10 |
各行は、データベース エンジン インスタンスのパフォーマンス カウンターを表します。 このデータセットには、一般的に使用されるカウンターが含まれています。 |
パフォーマンス カウンター (詳細) | sqldb_database_performance_counters_detailed |
00:01:00 |
各行は、データベース エンジン インスタンスのパフォーマンス カウンターを表します。 このデータセットには、詳細な監視とトラブルシューティングに必要なカウンターが含まれています。 |
プロパティ | sqldb_database_properties |
00:05:00 |
各行はデータベースを表し、データベース オプション、リソース ガバナンスの制限、およびその他のデータベース メタデータが含まれます。 |
クエリのランタイム統計 | sqldb_database_query_runtime_stats |
00:15:00 |
各行は、クエリ ストア ランタイム間隔を表し、クエリ実行統計が含まれます。 |
クエリ待機統計 | sqldb_database_query_wait_stats |
00:15:00 |
各行は、クエリ ストア ランタイム間隔を表し、待機カテゴリの統計を含みます。 |
レプリカ | sqldb_database_replicas |
00:00:10 |
各行は、レプリケーションメタデータや統計を含むデータベースレプリカを表します。 プライマリで収集された場合はプライマリ レプリカと geo レプリカ、セカンダリで収集された場合はセカンダリ レプリカが含まれます。 |
リソース使用率 | sqldb_database_resource_utilization |
00:00:15 |
各行は、データベースの CPU、データ IO、ログ IO、およびその他のリソース消費統計を期間で表します。 |
セッション統計 | sqldb_database_session_stats |
00:01:00 |
各行は、データベースのセッション統計の概要を表し、ログイン名、ホスト名、アプリケーション名などの非追加セッション属性によって集計されます。 |
SOS スケジューラ | sqldb_database_sos_schedulers |
00:01:00 |
各行は SOS スケジューラを表し、スケジューラ、CPU ノード、メモリ ノードの統計情報が含まれます。 |
ストレージ IO | sqldb_database_storage_io |
00:00:10 |
各行はデータベース ファイルを表し、ファイルの累積 IOPS、スループット、待機時間の統計情報が含まれます。 |
ストレージの使用 | sqldb_database_storage_utilization |
00:01:00 |
各行はデータベースを表し、tempdb 、クエリ ストア、永続化バージョン ストアなどのストレージ使用状況が含まれます。 |
テーブル メタデータ | sqldb_database_table_metadata |
00:30:00 |
各行はテーブルまたはインデックス付きビューを表し、行数、領域使用量、データ圧縮、列、制約などのメタデータが含まれます。 |
待機統計 | sqldb_database_wait_stats |
00:00:10 |
各行は待機の種類を表し、データベース エンジン インスタンスの累積待機統計が含まれます。 エラスティック プール内のデータベースの場合、データベース スコープの待機統計のみが収集されます。 |
注意
エラスティック プール内のデータベースの場合、プール レベルのデータを含む SQL Database データセットは収集されません。 これには、メモリ使用率、メモリ不足イベント、パフォーマンス カウンター (共通)、パフォーマンス カウンター (詳細) データセットが含まれます。 待機統計データセットは収集されますが、データベース スコープの待機のみが含まれます。 これにより、プール内のすべてのデータベースから同じデータを収集できなくなります。
プール レベルのデータは、SQL エラスティック プール データセットで収集されます。 特定のエラスティック プールの場合、パフォーマンス カウンター (共通) とパフォーマンス カウンター (詳細) データセットには、プール レベルのメトリックと、CPU、データ IO、ログ書き込み、要求、トランザクションなどの特定のデータベース レベルのメトリックが含まれます。
共通列
次の表に示すように、データセットにはターゲットの種類ごとに共通の列があります。
列名 | 説明 |
---|---|
subscription_id |
SQL Database の Azure サブスクリプション ID。 |
resource_group_name |
SQL Database のリソース グループ名。 |
resource_id |
SQL Database の Azure リソース ID。 |
sample_time_utc |
行の値が観察された時刻 (UTC)。 |
collection_time_utc |
Watcher によって行が収集された時刻 (UTC)。 この列は、収集時間がサンプル時間と異なる可能性があるデータセットに存在します。 |
replica_type |
次のうちの 1 つ: プライマリ、HA セカンダリ、geo レプリケーション フォワーダー、名前付きセカンダリ。 |
logical_server_name |
監視対象のデータベースまたはエラスティック プールを含む Azure SQL データベース内の論理サーバーの名前。 |
database_name |
監視対象のデータベースの名前。 |
database_id |
論理サーバー内で一意である監視対象のデータベースの データベース ID。 |
logical_database_id |
ユーザー データベースの有効期間中に変更されない一意のデータベース識別子。 データベースの名前を変更したり、サービス対象を変更しても、この値は変更されません。 |
physical_database_id |
ユーザー データベースに対応する現在の物理データベースの一意のデータベース識別子。 データベース サービス目標を変更すると、この値が変更されます。 |
replica_id |
Hyperscale コンピューティング レプリカの一意識別子。 |
データセットには、Database Watcher によって行が収集される前に観察されたサンプルが含まれている場合は、sample_time_utc
と collection_time_utc
の両方の列があります。 それ以外の場合、観測時間と収集時間は同じであり、データセットには sample_time_utc
列のみが含まれます。
たとえば、sqldb_database_resource_utilization
データセットは、sys.dm_db_resource_stats 動的管理ビュー (DMV) から派生します。 DMV には、15 秒間隔の集計リソース統計を報告する各行の観測時間である end_time
列が含まれています。 この時間は sample_time_utc
列で報告されます。 Database Watcher がこの DMV に対してクエリを実行すると、結果セットには、それぞれが異なる end_time
を持つ複数の行が含まれる場合があります。 これらの行すべてに、同じ collection_time_utc
値があります。