Azure Cosmos DB for NoSQL で高度な診断クエリを使用して問題をトラブルシューティングする
適用対象: NoSQL
この記事では、Azure Diagnostics (レガシ) テーブルとリソース固有 (プレビュー) テーブルに送信される診断ログを使用して、Azure Cosmos DB アカウントに関する問題のトラブルシューティングに役立つ、より高度なクエリを作成する方法について説明します。
Azure Diagnostics テーブルの場合、すべてのデータが 1 つのテーブルに書き込まれます。 クエリを実行するカテゴリをユーザーが指定します。 要求のフルテキスト クエリを確認したい場合は、「Azure の診断設定を使用して Azure Cosmos DB データを監視する」で、この機能を有効にする方法を参照してください。
リソース固有テーブルの場合、データはリソースのカテゴリごとに個別のテーブルに書き込まれます。 次の理由から、このモードをお勧めします。
- データの扱いがはるかに容易である。
- スキーマが見つけやすい。
- インジェストの待ち時間とクエリ時間の両方でパフォーマンスが向上する。
一般的なクエリ
一般的なクエリは、リソース固有のテーブルと Azure Diagnostics のテーブルに表示されます。
要求ユニット (RU) の消費量順に並べられた特定の時間枠の上位 N(10) のクエリ
let topRequestsByRUcharge = CDBDataPlaneRequests
| where TimeGenerated > ago(24h)
| project RequestCharge , TimeGenerated, ActivityId;
CDBQueryRuntimeStatistics
| project QueryText, ActivityId, DatabaseName , CollectionName
| join kind=inner topRequestsByRUcharge on ActivityId
| project DatabaseName , CollectionName , QueryText , RequestCharge, TimeGenerated
| order by RequestCharge desc
| take 10
特定の時間枠に調整された要求 (statusCode = 429)
let throttledRequests = CDBDataPlaneRequests
| where StatusCode == "429"
| project OperationName , TimeGenerated, ActivityId;
CDBQueryRuntimeStatistics
| project QueryText, ActivityId, DatabaseName , CollectionName
| join kind=inner throttledRequests on ActivityId
| project DatabaseName , CollectionName , QueryText , OperationName, TimeGenerated
応答時間が最も長いクエリ (サーバー応答のペイロード サイズ)
let operationsbyUserAgent = CDBDataPlaneRequests
| project OperationName, DurationMs, RequestCharge, ResponseLength, ActivityId;
CDBQueryRuntimeStatistics
//specify collection and database
//| where DatabaseName == "DBNAME" and CollectionName == "COLLECTIONNAME"
| join kind=inner operationsbyUserAgent on ActivityId
| summarize max(ResponseLength) by QueryText
| order by max_ResponseLength desc
物理パーティション別の RU 消費量 (レプリカ セット内のすべてのレプリカ)
CDBPartitionKeyRUConsumption
| where TimeGenerated >= now(-1d)
//specify collection and database
//| where DatabaseName == "DBNAME" and CollectionName == "COLLECTIONNAME"
// filter by operation type
//| where operationType_s == 'Create'
| summarize sum(todouble(RequestCharge)) by toint(PartitionKeyRangeId)
| render columnchart
論理パーティション別の RU 消費量 (レプリカ セット内のすべてのレプリカ)
CDBPartitionKeyRUConsumption
| where TimeGenerated >= now(-1d)
//specify collection and database
//| where DatabaseName == "DBNAME" and CollectionName == "COLLECTIONNAME"
// filter by operation type
//| where operationType_s == 'Create'
| summarize sum(todouble(RequestCharge)) by PartitionKey, PartitionKeyRangeId
| render columnchart
次のステップ
- Azure Cosmos DB の診断設定を作成する方法について詳しくは、診断設定の作成に関するページを参照してください。
- Azure portal、Azure CLI、または PowerShell を使用して診断設定を作成する方法の詳細については、Azure でプラットフォーム ログとメトリックを収集するための診断設定の作成に関するページを参照してください。