Rozwiązywanie problemów z zapytaniami diagnostycznymi

DOTYCZY: Nosql Mongodb Cassandra Gremlin Tabeli

W tym artykule opisano sposób pisania prostych 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 AzureDiagnostics (starsza wersja) i Specyficzne dla zasobów (wersja zapoznawcza).

W przypadku Diagnostyka Azure tabel wszystkie dane są zapisywane w jednej tabeli, a użytkownicy muszą określić kategorię, do której mają być przeznaczone zapytania.

W przypadku tabel specyficznych dla zasobów dane są zapisywane w poszczególnych tabelach dla każdej kategorii zasobu (niedostępne dla interfejsu API tabel). Zalecamy ten tryb, ponieważ znacznie ułatwia pracę z danymi, zapewnia lepszą możliwość odnajdywania schematów i poprawia wydajność zarówno w czasie opóźnienia pozyskiwania, jak i zapytań.

Typowe zapytania

Oto lista typowych zapytań dotyczących rozwiązywania problemów.

Wykonywanie zapytań dotyczących operacji, które trwają dłużej niż 3 milisekundy

Znajdź operacje o czasie trwania większym niż 3 milisekundy.

AzureDiagnostics 
| where toint(duration_s) > 3 and ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
| summarize count() by clientIpAddress_s, TimeGenerated

Wykonywanie zapytań dotyczących agentów użytkowników, którzy uruchamiają operacje

Znajdź agentów użytkownika skojarzonych z każdą operacją.

AzureDiagnostics 
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
| summarize count() by OperationName, userAgent_s

Wykonywanie zapytań dotyczących długotrwałych operacji

Znajdź operacje, które działały przez długi czas, łącząc ich środowisko uruchomieniowe z pięciosekundowymi interwałami.

AzureDiagnostics 
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
| project TimeGenerated , duration_s 
| summarize count() by bin(TimeGenerated, 5s)
| render timechart

Pobieranie statystyk klucza partycji w celu oceny niesymetryczności na trzech pierwszych partycjach dla konta bazy danych

Zmierz niesymetryczność, uzyskując typowe statystyki dla partycji fizycznych.

AzureDiagnostics 
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="PartitionKeyStatistics" 
| project SubscriptionId, regionName_s, databaseName_s, collectionName_s, partitionKey_s, sizeKb_d, ResourceId 

Pobieranie opłat za żądania dla kosztownych zapytań

Zmierz opłatę za żądanie (w jednostkach RU) dla największych zapytań.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" and todouble(requestCharge_s) > 10.0
| project activityId_g, requestCharge_s
| join kind= inner (
AzureDiagnostics
| where ResourceProvider =="MICROSOFT.DOCUMENTDB" and Category == "QueryRuntimeStatistics"
| project activityId_g, querytext_s
) on $left.activityId_g == $right.activityId_g
| order by requestCharge_s desc
| limit 100

Znajdowanie operacji, które zajmują większość jednostek RU/s

Sortuj operacje według liczby jednostek RU/jednostek, których używają.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h) 
| summarize max(responseLength_s), max(requestLength_s), max(requestCharge_s), count = count() by OperationName, requestResourceType_s, userAgent_s, collectionRid_s, bin(TimeGenerated, 1h)

Pobierz wszystkie zapytania zużywające więcej niż 100 RU/s

Znajdź zapytania, które zużywają więcej jednostek RU/s niż ilość punktu odniesienia.

To zapytanie łączy się z danymi z DataPlaneRequests i QueryRunTimeStatistics.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" and todouble(requestCharge_s) > 100.0
| project activityId_g, requestCharge_s
| join kind= inner (
        AzureDiagnostics
        | where ResourceProvider =="MICROSOFT.DOCUMENTDB" and Category == "QueryRuntimeStatistics"
        | project activityId_g, querytext_s
) on $left.activityId_g == $right.activityId_g
| order by requestCharge_s desc
| limit 100

Pobieranie opłat za żądanie i czas trwania wykonywania zapytania

Pobierz statystyki dotyczące opłaty za żądanie i czasu trwania dla określonego zapytania.

AzureDiagnostics
| where TimeGenerated >= ago(24hr)
| where Category == "QueryRuntimeStatistics"
| join (
AzureDiagnostics
| where TimeGenerated >= ago(24hr)
| where Category == "DataPlaneRequests"
) on $left.activityId_g == $right.activityId_g
| project databasename_s, collectionname_s, OperationName1 , querytext_s,requestCharge_s1, duration_s1, bin(TimeGenerated, 1min)

Pobieranie dystrybucji dla różnych operacji

Grupuj operacje według dystrybucji zasobów.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h) 
| summarize count = count()  by OperationName, requestResourceType_s, bin(TimeGenerated, 1h) 

Uzyskiwanie maksymalnej przepływności używanej przez partycję

Uzyskaj maksymalną przepływność dla partycji fizycznej.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h) 
| summarize max(requestCharge_s) by bin(TimeGenerated, 1h), partitionId_g

Uzyskiwanie informacji o użyciu kluczy partycji RU/s na sekundę

Mierzenie użycia jednostek RU/s na sekundę na klucz partycji.

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption" 
| summarize total = sum(todouble(requestCharge_s)) by databaseName_s, collectionName_s, partitionKey_s, TimeGenerated 
| order by TimeGenerated asc 

Pobieranie opłaty za żądanie dla określonego klucza partycji

Mierzenie opłaty za żądanie na klucz partycji.

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption" 
| where parse_json(partitionKey_s)[0] == "2" 

Uzyskiwanie najważniejszych kluczy partycji z największą ilością jednostek RU/s używanych w określonym przedziale czasu

Sortowanie kluczy partycji na podstawie użycia jednostek żądania w przedziale czasu.

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption" 
| where TimeGenerated >= datetime("11/26/2019, 11:20:00.000 PM") and TimeGenerated <= datetime("11/26/2019, 11:30:00.000 PM") 
| summarize total = sum(todouble(requestCharge_s)) by databaseName_s, collectionName_s, partitionKey_s 
| order by total desc

Pobieranie dzienników dla kluczy partycji, których rozmiar magazynu jest większy niż 8 GB

Znajdź dzienniki kluczy partycji filtrowanych według rozmiaru magazynu na klucz partycji.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="PartitionKeyStatistics"
| where todouble(sizeKb_d) > 800000

Pobieranie opóźnień P99 lub P50 dla operacji, opłaty za żądanie lub długości odpowiedzi

Mierzenie wydajności dla; opóźnienie operacji, użycie jednostek RU/s i długość odpowiedzi.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2d)
| summarize percentile(todouble(responseLength_s), 50), percentile(todouble(responseLength_s), 99), max(responseLength_s), percentile(todouble(requestCharge_s), 50), percentile(todouble(requestCharge_s), 99), max(requestCharge_s), percentile(todouble(duration_s), 50), percentile(todouble(duration_s), 99), max(duration_s), count() by OperationName, requestResourceType_s, userAgent_s, collectionRid_s, bin(TimeGenerated, 1h)

Pobieranie dzienników płaszczyzny sterowania

Uzyskaj długą płaszczyznę sterowania przy użyciu polecenia ControlPlaneRequests.

Porada

Pamiętaj, aby włączyć flagę opisaną w artykule Wyłączanie dostępu do zapisu metadanych opartych na kluczach i wykonywać operacje przy użyciu Azure PowerShell, interfejsu wiersza polecenia platformy Azure lub usługi Azure Resource Manager.

AzureDiagnostics 
| where Category =="ControlPlaneRequests"
| summarize by OperationName 

Następne kroki