Partager via


Résoudre les problèmes liés aux requêtes de diagnostic

S’APPLIQUE À : NoSQL MongoDB Cassandra Gremlin Table

Dans cet article, nous aborderons l’écriture de requêtes simples pour vous aider à résoudre les problèmes liés à votre compte Azure Cosmos DB à l’aide des journaux de diagnostic envoyés à AzureDiagnostics (hérité) et aux tables spécifiques aux ressources (préversion).

Pour les tables Diagnostics Azure, toutes les données sont écrites dans une seule table et les utilisateurs doivent spécifier la catégorie à interroger.

Pour les tables spécifiques aux ressources, les données sont écrites dans des tables individuelles pour chaque catégorie de la ressource (non disponible pour l’API de table). Nous recommandons ce mode, car il simplifie considérablement l’utilisation des données, fournit une meilleure détectabilité des schémas et améliore les performances de la latence et des délais d’interrogation de l’ingestion.

Requêtes courantes

Voici une liste des requêtes de résolution de problèmes courantes.

Rechercher les opérations dont l’exécution prend plus de 3 millisecondes

Recherchez les opérations dont la durée est supérieure à 3 millisecondes.

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

Rechercher les agents utilisateur qui exécutent des opérations

Recherchez les agents utilisateur associés à chaque opération.

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

Rechercher les opérations de longue durée

Recherchez les opérations qui ont été exécutées pendant une longue période en effectuant une quantification de leur exécution par intervalles de cinq secondes.

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

Obtenir des statistiques de clé de partition pour évaluer le décalage entre les trois partitions principales pour un compte de base de données

Mesurez le décalage en obtenant des statistiques courantes pour les partitions physiques.

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

Obtenir les frais de requête pour les requêtes coûteuses

Mesurez les frais de requête (en RU) pour les requêtes les plus volumineuses.

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

Rechercher les opérations qui consomment le plus de RU/s

Triez les opérations en fonction de la quantité de RU/s qu’elles utilisent.

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)

Obtenir toutes les requêtes qui consomment plus de 100 RU/s

Recherchez les requêtes qui consomment plus de RU/s qu’une quantité de référence.

Cette requête joint les données de DataPlaneRequests et 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

Obtenir les frais de requête et la durée d’exécution d’une requête

Obtenez des statistiques sur les frais de requête et la durée d’une requête spécifique.

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)

Obtenir la distribution pour différentes opérations

Regroupez les opérations en fonction de la distribution des ressources.

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

Obtenir le débit maximal consommé par une partition

Obtenez le débit maximal pour une partition physique.

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

Obtenir les informations sur la consommation des clés de partition en RU/s

Mesurez la consommation en RU/s par clé de partition.

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 

Obtenir les frais de requête pour une clé de partition spécifique

Mesurez les frais de demande par clé de partition.

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

Obtenir les principales clés de partition avec la plus grande consommation en RU/s au cours d’une période donnée

Triez les clés de partition en fonction de la consommation en unités de requête dans une fenêtre de temps.

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

Obtenir les journaux des clés de partition dont la taille de stockage est supérieure à 8 Go

Recherchez les journaux des clés de partition filtrés par taille de stockage par clé de partition.

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

Obtenir des latences P99 ou P50 pour les opérations, la charge de requête ou la durée de la réponse

Mesurez les performances pour la latence de l’opération, l’utilisation en RU/s et la longueur de la réponse.

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)

Obtenir les journaux du plan de contrôle

Obtenez les journaux du plan de contrôle long en utilisant ControlPlaneRequests.

Conseil

N’oubliez pas d’activer l’indicateur décrit dans Désactiver l’accès en écriture aux métadonnées basé sur les clés et exécutez les opérations en utilisant Azure PowerShell, l’interface CLI Azure ou Azure Resource Manager.

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

Étapes suivantes