Dans cet article, nous allons voir comment écrire des requêtes plus avancées pour vous aider à résoudre les problèmes de votre compte Azure Cosmos DB for Cassandra en utilisant les journaux de diagnostic envoyés aux tables spécifiques des ressources.
Pour les tables Diagnostics Azure, toutes les données sont écrites dans une seule table. Les utilisateurs spécifient la catégorie qu’ils veulent interroger. Si vous souhaitez voir la requête de texte intégral de votre requête, consultez Superviser les données Azure Cosmos DB en utilisant des paramètres de diagnostic dans Azure pour savoir comment activer cette fonctionnalité.
Avertissement
Lorsque vous créez un paramètre de diagnostic pour le compte API pour Cassandra, assurez-vous que l’option « DataPlaneRequests » n’est pas sélectionnée. En outre, pour la table de destination, assurez-vous que « Spécifique aux ressources » est choisi, car il offre des économies significatives par rapport à « Azure Diagnostics ».
Opérations Cassandra qui consomment des RU/s élevées.
CDBCassandraRequests
| where DatabaseName=="azure_comos" and CollectionName=="user"
| project TimeGenerated, RequestCharge, OperationName,
requestType=split(split(PIICommandText,'"')[3], ' ')[0]
| summarize max(RequestCharge) by bin(TimeGenerated, 10m), tostring(requestType), OperationName;
Surveillance de la consommation de RU par opération sur les clés de partition logique.
CDBPartitionKeyRUConsumption
| where DatabaseName=="azure_comos" and CollectionName=="user"
| summarize TotalRequestCharge=sum(todouble(RequestCharge)) by PartitionKey, PartitionKeyRangeId
| order by TotalRequestCharge;
CDBPartitionKeyRUConsumption
| where DatabaseName=="azure_comos" and CollectionName=="user"
| summarize TotalRequestCharge=sum(todouble(RequestCharge)) by OperationName, PartitionKey
| order by TotalRequestCharge;
CDBPartitionKeyRUConsumption
| where DatabaseName=="azure_comos" and CollectionName=="user"
| summarize TotalRequestCharge=sum(todouble(RequestCharge)) by bin(TimeGenerated, 1m), PartitionKey
| render timechart;
Quelles sont les principales requêtes ayant un impact sur la consommation de RU ?
CDBCassandraRequests
| where DatabaseName=="azure_cosmos" and CollectionName=="user"
| where TimeGenerated > ago(24h)
| project ActivityId, DatabaseName, CollectionName, queryText=split(split(PIICommandText,'"')[3], ' ')[0], RequestCharge, TimeGenerated
| order by RequestCharge desc;
Consommation de RU basée sur des variations de tailles de charge utile pour les opérations de lecture et d’écriture.
// This query is looking at read operations
CDBCassandraRequests
| where DatabaseName=="azure_cosmos" and CollectionName=="user"
| project ResponseLength, TimeGenerated, RequestCharge, cassandraOperationName=split(split(PIICommandText,'"')[3], ' ')[0]
| where cassandraOperationName =="SELECT"
| summarize maxResponseLength=max(ResponseLength), maxRU=max(RequestCharge) by bin(TimeGenerated, 10m), tostring(cassandraOperationName)
// This query is looking at write operations
CDBCassandraRequests
| where DatabaseName=="azure_cosmos" and CollectionName=="user"
| project ResponseLength, TimeGenerated, RequestCharge, cassandraOperationName=split(split(PIICommandText,'"')[3], ' ')[0]
| where cassandraOperationName in ("CREATE", "UPDATE", "INSERT", "DELETE", "DROP")
| summarize maxResponseLength=max(ResponseLength), maxRU=max(RequestCharge) by bin(TimeGenerated, 10m), tostring(cassandraOperationName)
// Write operations over a time period.
CDBCassandraRequests
| where DatabaseName=="azure_cosmos" and CollectionName=="user"
| project ResponseLength, TimeGenerated, RequestCharge, cassandraOperationName=split(split(PIICommandText,'"')[3], ' ')[0]
| where cassandraOperationName in ("CREATE", "UPDATE", "INSERT", "DELETE", "DROP")
| summarize maxResponseLength=max(ResponseLength), maxRU=max(RequestCharge) by bin(TimeGenerated, 10m), tostring(cassandraOperationName)
| render timechart;
// Read operations over a time period.
CDBCassandraRequests
| where DatabaseName=="azure_cosmos" and CollectionName=="user"
| project ResponseLength, TimeGenerated, RequestCharge, cassandraOperationName=split(split(PIICommandText,'"')[3], ' ')[0]
| where cassandraOperationName =="SELECT"
| summarize maxResponseLength=max(ResponseLength), maxRU=max(RequestCharge) by bin(TimeGenerated, 10m), tostring(cassandraOperationName)
| render timechart;
Consommation de RU basée sur les opérations de lecture et d’écriture par partition logique.
CDBPartitionKeyRUConsumption
| where DatabaseName=="azure_cosmos" and CollectionName=="user"
| where OperationName in ("Delete", "Read", "Upsert")
| summarize totalRU=max(RequestCharge) by OperationName, PartitionKeyRangeId
Consommation de RU par partition physique et logique.
CDBPartitionKeyRUConsumption
| where DatabaseName=="azure_cosmos" and CollectionName=="user"
| summarize totalRequestCharge=sum(RequestCharge) by PartitionKey, PartitionKeyRangeId;
Une partition à niveau d’accès chaud est-elle à la pointe de la consommation de RU ?
CDBPartitionKeyStatistics
| where DatabaseName=="azure_cosmos" and CollectionName=="user"
| where TimeGenerated > now(-8h)
| summarize StorageUsed = sum(SizeKb) by PartitionKey
| order by StorageUsed desc
Comment la clé de partition a-t-elle une incidence sur la consommation de RU ?
let storageUtilizationPerPartitionKey =
CDBPartitionKeyStatistics
| project AccountName=tolower(AccountName), PartitionKey, SizeKb;
CDBCassandraRequests
| project AccountName=tolower(AccountName),RequestCharge, ErrorCode, OperationName, ActivityId, DatabaseName, CollectionName, PIICommandText, RegionName
| where DatabaseName=="azure_cosmos" and CollectionName=="user"
| join kind=inner storageUtilizationPerPartitionKey on $left.AccountName==$right.AccountName
| where ErrorCode != -1 //successful
| project AccountName, PartitionKey,ErrorCode,RequestCharge,SizeKb, OperationName, ActivityId, DatabaseName, CollectionName, PIICommandText, RegionName;
Nombre de délais d’attente côté serveur (code d’état - 408) affichés dans la fenêtre temporelle.
CDBCassandraRequests
| where DatabaseName=="azure_cosmos" and CollectionName=="user"
| where ErrorCode in (4608, 4352) //Corresponding code in Cassandra
| summarize max(DurationMs) by bin(TimeGenerated, 10m), ErrorCode
| render timechart;
Observons-nous les pics de latence côté serveur dans la fenêtre temporelle spécifiée ?
CDBCassandraRequests
| where TimeGenerated > now(-6h)
| DatabaseName=="azure_cosmos" and CollectionName=="user"
| summarize max(DurationMs) by bin(TimeGenerated, 10m)
| render timechart;
Opérations qui sont limitées.
CDBCassandraRequests
| where DatabaseName=="azure_cosmos" and CollectionName=="user"
| project RequestLength, ResponseLength,
RequestCharge, DurationMs, TimeGenerated, OperationName,
query=split(split(PIICommandText,'"')[3], ' ')[0]
| summarize max(DurationMs) by bin(TimeGenerated, 10m), RequestCharge, tostring(query),
RequestLength, OperationName
| order by RequestLength, RequestCharge;