Rozwiązywanie problemów z zaawansowanymi zapytaniami diagnostycznymi za pomocą usługi Azure Cosmos DB for NoSQL

DOTYCZY: NoSQL

W tym artykule omówiono sposób pisania bardziej zaawansowanych zapytań, aby ułatwić rozwiązywanie problemów z kontem usługi Azure Cosmos DB przy użyciu dzienników diagnostycznych wysyłanych do tabel Diagnostyka Azure (starsza wersja) i specyficznych dla zasobów (wersja zapoznawcza).

W przypadku tabel Diagnostyka Azure wszystkie dane są zapisywane w jednej tabeli. Użytkownicy określają kategorię, którą mają wykonywać zapytania. Jeśli chcesz wyświetlić zapytanie pełnotekstowe żądania, zobacz Monitorowanie danych usługi Azure Cosmos DB przy użyciu ustawień diagnostycznych na platformie Azure , aby dowiedzieć się, jak włączyć tę funkcję.

W przypadku tabel specyficznych dla zasobów dane są zapisywane w poszczególnych tabelach dla każdej kategorii zasobu. Zalecamy ten tryb, ponieważ:

  • Ułatwia pracę z danymi.
  • Zapewnia lepszą możliwość odnajdywania schematów.
  • Zwiększa wydajność zarówno opóźnienia pozyskiwania, jak i czasu wykonywania zapytań.

Typowe zapytania

Typowe zapytania są wyświetlane w tabelach specyficznych dla zasobów i Diagnostyka Azure.

Pierwsze zapytania N(10) uporządkowane według użycia jednostek żądań (RU) w określonym przedziale czasu

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

Żądania ograniczone (statusCode = 429) w określonym przedziale czasu

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

Zapytania o największej długości odpowiedzi (rozmiar ładunku odpowiedzi serwera)

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

Użycie jednostek RU przez partycję fizyczną (we wszystkich replikach w zestawie replik)

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

Użycie jednostek RU przez partycję logiczną (we wszystkich replikach w zestawie replik)

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  

Następne kroki