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
- Per altre informazioni su come creare impostazioni di diagnostica per Azure Cosmos DB, vedere Creazione di impostazioni di diagnostica.
- Per informazioni dettagliate su come creare un'impostazione di diagnostica usando l'portale di Azure, l'interfaccia della riga di comando o PowerShell, vedere Creare un'impostazione di diagnostica per raccogliere i log e le metriche della piattaforma in Azure.