Problembehandlung mit Diagnoseabfragen

GILT FÜR: NoSQL MongoDB Cassandra Gremlin Tabelle

In diesem Artikel erfahren Sie, wie Sie einfache Abfragen schreiben, um Probleme mit Ihrem Azure Cosmos DB-Konto mithilfe von Diagnoseprotokollen zu beheben, die an AzureDiagnostics-Tabellen (Legacy) und ressourcenspezifische Tabellen (Vorschauversion) gesendet werden.

Bei Azure Diagnostics-Tabellen werden alle Daten in eine einzelne Tabelle geschrieben, und Benutzer*innen müssen angeben, welche Kategorie sie abfragen möchten.

Bei ressourcenspezifischen Tabellen werden Daten in einzelne Tabellen für die jeweilige Kategorie der Ressource geschrieben (nicht verfügbar für die Tabellen-API). Wir empfehlen diesen Modus, da die Bearbeitung der Daten erheblich erleichert wird, eine bessere Erkennbarkeit der Schemas ermöglicht wird und die Leistung in Bezug auf Erfassungslatenz sowie Abfragezeiten verbessert wird.

Allgemeine Abfragen

Im Folgenden finden Sie eine Liste allgemeiner Abfragen zur Problembehandlung.

Abfragen von Vorgängen, deren Ausführung länger als 3 Millisekunden dauert

Ermitteln Sie Vorgänge mit einer Dauer von mehr als 3 Millisekunden.

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

Abfragen von Benutzer-Agents, die Vorgänge ausführen

Ermitteln Sie Benutzer-Agents, die den einzelnen Vorgängen zugeordnet sind.

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

Abfragen von Vorgängen mit langer Ausführungsdauer

Ermitteln Sie Vorgänge mit langer Ausführungsdauer, indem Sie ihre Laufzeit in Fünf-Sekunden-Intervalle unterteilen.

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

Abrufen der Partitionsschlüsselstatistiken zum Auswerten der Neidung in den drei wichtigsten Partitionen für ein Datenbankkonto

Messen Sie die Neigung, indem Sie allgemeine Statistiken für physische Partitionen abrufen.

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

Abrufen der Anforderungskosten für teure Abfragen

Messen Sie die Anforderungsgebühr (in RUs) für die größten Abfragen.

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

Ermitteln, welche Vorgänge die meisten RU/s in Anspruch nehmen

Sortieren Sie Vorgänge nach der Menge der verwendeten RU/s.

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)

Abrufen aller Abfragen, die mehr als 100 RU/s verbrauchen

Ermitteln Sie Abfragen, die mehr RU/s verbrauchen als eine Basismenge.

Diese Abfrage wird mit Daten aus DataPlaneRequests und QueryRunTimeStatistics verknüpft.

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

Abrufen der Anforderungsgebühren und der Ausführungsdauer einer Abfrage

Rufen Sie Statistiken sowohl für die Anforderungsgebühr als auch für die Dauer einer bestimmten Abfrage ab.

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)

Abrufen der Verteilung für verschiedene Vorgänge

Gruppieren Sie Vorgänge nach der Ressourcenverteilung.

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

Abrufen des maximalen Durchsatzes, den eine Partition verbraucht hat

Rufen Sie den maximalen Durchsatz für eine physische Partition ab.

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

Abrufen von Informationen zum RU/s-Verbrauch pro Sekunde der Partitionsschlüssel

Messen Sie den RU/s-Verbrauch pro Sekunde und Partitionsschlüssel.

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 

Abrufen der Anforderungskosten für einen bestimmten Partitionsschlüssel

Messen sie die Anforderungsgebühr pro Partitionsschlüssel.

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

Abrufen der wichtigsten Partitionsschlüssel mit den meisten verbrauchten RU/s in einem bestimmten Zeitraum

Sortieren Sie Partitionsschlüssel basierend auf dem Anforderungseinheitenverbrauch innerhalb eines Zeitfensters.

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

Abrufen der Protokolle für die Partitionsschlüssel, deren Speichergröße größer als 8 GB ist

Suchen Sie Protokolle für Partitionsschlüssel, die nach der Größe des Speichers pro Partitionsschlüssel gefiltert sind.

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

Abrufen der P99- oder P50-Latenzen für Vorgänge, Anforderungsgebühren oder die Länge der Antwort

Messen Sie die Leistung für Vorgangslatenz, RU/s-Nutzung und Antwortlänge.

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)

Abrufen von Protokollen der Steuerungsebene

Rufen Sie Protokolle der Steuerungsebene mithilfe von ControlPlaneRequests ab.

Tipp

Denken Sie daran, das Flag zu aktivieren, wie unter Deaktivieren des schlüsselbasierten Metadatenschreibzugriffs beschrieben, und führen Sie die Vorgänge mithilfe von Azure PowerShell, der Azure CLI oder Azure Resource Manager aus.

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

Nächste Schritte