Condividi tramite


Risolvere i problemi relativi alle query di diagnostica

SI APPLICA A: NoSQL MongoDB Cassandra Gremlin Tabella

In questo articolo viene illustrato come scrivere query semplici per risolvere i problemi relativi all'account Azure Cosmos DB usando i log di diagnostica inviati alle tabelle di AzureDiagnostics (legacy) e specifiche delle risorse (anteprima).

Per Diagnostica di Azure tabelle, tutti i dati vengono scritti in una singola tabella e gli utenti devono specificare la categoria su cui eseguire una query.

Per le tabelle specifiche delle risorse, i dati vengono scritti in singole tabelle per ogni categoria della risorsa (non disponibile per API Tabella). È consigliabile usare questa modalità perché facilita molto l'utilizzo dei dati, offre una migliore individuabilità degli schemi e migliora le prestazioni sia in termini di latenza di inserimento che di tempi di query.

Query comuni

Ecco un elenco di query comuni per la risoluzione dei problemi.

Eseguire una query per le operazioni che richiedono più di 3 millisecondi per l'esecuzione

Trovare le operazioni con una durata maggiore di 3 millisecondi.

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

Eseguire una query per gli agenti utente che eseguono operazioni

Trovare gli agenti utente associati a ogni operazione.

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

Query per operazioni a esecuzione prolungata

Trovare le operazioni eseguite per molto tempo eseguendo il runtime in intervalli di cinque secondi.

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

Ottenere statistiche sulle chiavi di partizione per valutare l'asimmetria tra le prime tre partizioni per un account di database

Misurare l'asimmetria ottenendo statistiche comuni per le partizioni fisiche.

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

Ottenere gli addebiti per le richieste per query costose

Misurare l'addebito della richiesta (in UR) per le query più grandi.

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

Individuare le operazioni che richiedono la maggior parte delle UR/sec

Ordinare le operazioni in base alla quantità di UR/sec in uso.

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)

Ottenere tutte le query che utilizzano più di 100 UR/sec

Trovare query che utilizzano più UR/sec rispetto a una quantità di base.

Questa query viene unita ai dati da DataPlaneRequests e 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

Ottenere gli addebiti per la richiesta e la durata dell'esecuzione di una query

Ottenere statistiche sia nell'addebito della richiesta che nella durata per una query specifica.

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)

Ottenere la distribuzione per operazioni diverse

Raggruppare le operazioni in base alla distribuzione delle risorse.

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

Ottenere la velocità effettiva massima usata da una partizione

Ottenere la velocità effettiva massima per una partizione fisica.

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

Ottenere informazioni sul consumo di UR/sec delle chiavi di partizione al secondo

Misurare il consumo di UR/sec in base al secondo per ogni chiave di partizione.

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 

Ottenere l'addebito della richiesta per una chiave di partizione specifica

Misurare l'addebito della richiesta per ogni chiave di partizione.

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

Ottenere le chiavi di partizione principali con la maggior parte delle UR/s utilizzate in un periodo specifico

Ordinare le chiavi di partizione in base all'utilizzo delle unità richiesta entro un intervallo di tempo.

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

Ottenere i log per le chiavi di partizione le cui dimensioni di archiviazione sono superiori a 8 GB

Trovare i log per le chiavi di partizione filtrate in base alle dimensioni dell'archiviazione per ogni chiave di partizione.

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

Ottenere latenze P99 o P50 per operazioni, addebito della richiesta o lunghezza della risposta

Misurare le prestazioni per; latenza dell'operazione, utilizzo di UR/sec e lunghezza della risposta.

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)

Ottenere i log del piano di controllo

Ottenere un piano di controllo lungo usando ControlPlaneRequests.

Suggerimento

Ricordarsi di attivare il flag descritto in Disabilitare l'accesso in scrittura ai metadati basati su chiave ed eseguire le operazioni usando Azure PowerShell, l'interfaccia della riga di comando di Azure o Azure Resource Manager.

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

Passaggi successivi