Share via


Problemen met diagnostische query's oplossen

VAN TOEPASSING OP: NoSQL MongoDB Cassandra Gremlin Tafel

In dit artikel wordt beschreven hoe u eenvoudige query's schrijft om problemen met uw Azure Cosmos DB-account op te lossen met behulp van diagnostische logboeken die zijn verzonden naar AzureDiagnostics (verouderd) en resourcespecifieke (preview) -tabellen.

Voor Azure Diagnostics-tabellen worden alle gegevens in één tabel geschreven en moeten gebruikers opgeven welke categorie ze willen opvragen.

Voor resourcespecifieke tabellen worden gegevens geschreven in afzonderlijke tabellen voor elke categorie van de resource (niet beschikbaar voor tabel-API). We raden deze modus aan, omdat het veel eenvoudiger is om met de gegevens te werken, de schema's beter kunt detecteren en de prestaties voor zowel opnamelatentie als querytijden verbetert.

Algemene query's

Hier volgt een lijst met veelvoorkomende query's voor probleemoplossing.

Query uitvoeren op bewerkingen die langer duren dan 3 milliseconden

Zoek bewerkingen met een duur van meer dan 3 milliseconden.

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

Query uitvoeren op gebruikersagents die bewerkingen uitvoeren

Zoek gebruikersagents die aan elke bewerking zijn gekoppeld.

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

Query uitvoeren op langlopende bewerkingen

Zoek bewerkingen die lange tijd zijn uitgevoerd door hun runtime te binning in intervallen van vijf seconden.

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

Statistieken over partitiesleutels ophalen om scheeftrekken te evalueren over de drie bovenste partities voor een databaseaccount

Meet scheefheid door algemene statistieken voor fysieke partities op te halen.

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

De aanvraagkosten voor dure query's ophalen

Meet de aanvraagkosten (in RU's) voor de grootste query's.

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

Zoeken welke bewerkingen de meeste RU/s gebruiken

Sorteerbewerkingen op de hoeveelheid RU/s die ze gebruiken.

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)

Alle query's ophalen die meer dan 100 RU/s verbruiken

Zoek query's die meer RU/s verbruiken dan een basislijnhoeveelheid.

Deze query wordt samengevoegd met gegevens van DataPlaneRequests en 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

De aanvraagkosten en de uitvoeringsduur van een query ophalen

Statistieken ophalen in zowel aanvraagkosten als duur voor een specifieke query.

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)

De distributie voor verschillende bewerkingen ophalen

Groepeer bewerkingen op de resourcedistributie.

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

De maximale doorvoer ophalen die een partitie heeft verbruikt

Haal de maximale doorvoer voor een fysieke partitie op.

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

Informatie ophalen over het RU/s-verbruik van partitiesleutels per seconde

Ru/s-verbruik meten per seconde per partitiesleutel.

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 

Aanvraagkosten voor een specifieke partitiesleutel ophalen

Meting van aanvraagkosten per partitiesleutel.

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

Haal de belangrijkste partitiesleutels op met de meeste RU/s die in een specifieke periode worden gebruikt

Sorteer partitiesleutels op basis van verbruik van aanvraageenheden binnen een tijdvenster.

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

Logboeken ophalen voor de partitiesleutels waarvan de opslaggrootte groter is dan 8 GB

Zoek logboeken voor partitiesleutels die zijn gefilterd op de grootte van de opslag per partitiesleutel.

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

P99- of P50-latenties ophalen voor bewerkingen, aanvraagkosten of de lengte van het antwoord

Prestaties meten voor; bewerkingslatentie, RU/s-gebruik en antwoordlengte.

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)

Logboeken van het besturingsvlak ophalen

Haal het besturingsvlak lang op met behulp van ControlPlaneRequests.

Tip

Vergeet niet om de vlag in te schakelen die wordt beschreven in Schrijftoegang voor sleutelgebaseerde metagegevens uitschakelen en de bewerkingen uit te voeren met behulp van Azure PowerShell, de Azure CLI of Azure Resource Manager.

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

Volgende stappen