Solución de problemas con las consultas de diagnóstico

SE APLICA A: NoSQL MongoDB Cassandra Gremlin Table

En este artículo, explicaremos cómo escribir consultas sencillas para ayudar a solucionar incidencias relacionadas con su cuenta de Azure Cosmos DB mediante registros de diagnóstico enviados a tablas de Azure Diagnostics (heredadas) y específicas del recurso (versión preliminar).

En el caso de las tablas de Azure Diagnostics, todos los datos se escriben en una sola tabla y los usuarios tendrán que especificar la categoría que desean consultar.

En el caso de las tablas específicas del recurso, los datos se escriben en tablas individuales para cada categoría del recurso (no disponible para Table API). Recomendamos este modo, ya que facilita el trabajo con los datos, proporciona una mejor detectabilidad de los esquemas y mejora el rendimiento tanto en la latencia de ingesta como en los tiempos de consulta.

Consultas comunes

Esta es una lista de consultas comunes de solución de problemas.

Consulta de las operaciones que tardan más de 3 milisegundos en ejecutarse

Busque operaciones que tengan una duración superior a 3 milisegundos.

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

Consulta de agentes de usuario que ejecutan operaciones

Busque agentes de usuario asociados a cada operación.

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

Consulta de operaciones de ejecución prolongada

Busque operaciones que se ejecutaron durante mucho tiempo mediante la cuantificación de su tiempo de ejecución en intervalos de cinco segundos.

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

Obtención de las estadísticas de clave de partición para evaluar el sesgo entre las tres primeras particiones de una cuenta de base de datos

Mida la asimetría obteniendo estadísticas comunes para las particiones físicas.

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

Obtención de los cargos de solicitud para las consultas costosas

Mida el cargo de solicitud (en RU) para las consultas más grandes.

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

Detección de las operaciones que consumen la mayor parte de las RU por segundo

Ordene las operaciones según la cantidad de RU por segundo que están usando.

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)

Obtención de todas las consultas que consumen más de 100 RU por segundo

Busque consultas que consuman más RU por segundo que una cantidad de línea de base.

Esta consulta se combina con datos de DataPlaneRequests y 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

Obtención de los cargos de una solicitud y la duración de la ejecución de una consulta

Obtenga estadísticas tanto en el cargo de solicitud como en la duración de una consulta específica.

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)

Obtención de la distribución de distintas operaciones

Agrupe las operaciones según la distribución de recursos.

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

Obtención del rendimiento máximo que ha consumido una partición

Obtenga el rendimiento máximo de una partición física.

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

Obtención de la información sobre el consumo de RU por segundo de las claves de partición

Mida el consumo de RU por segundo según la clave de partición y por segundo.

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 

Obtención del cargo de la solicitud de una clave de partición específica

Mida el cargo de solicitud por clave de partición.

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

Obtención de las principales claves de partición con el mayor número de RU por segundo consumidas en un período específico

Ordene las claves de partición en función del consumo de la unidad de solicitud dentro de un período de tiempo.

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

Obtención de los registros de las claves de partición cuyo tamaño de almacenamiento es superior a los 8 GB

Busque los registros de las claves de partición filtradas por el tamaño de almacenamiento por clave de partición.

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

Obtención de las latencias P99 o P50 en las operaciones, los cargos de solicitud o la longitud de la respuesta

Mida el rendimiento de la latencia de operación, el uso de RU por segundo y la duración de respuesta.

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)

Obtención delos registros del plano de control

Obtenga el plano de control largo mediante ControlPlaneRequests.

Sugerencia

Recuerde activar la marca tal como se describe en Deshabilitar el acceso de escritura de metadatos basados en claves y ejecute las operaciones con Azure PowerShell, la CLI de Azure o Azure Resource Manager.

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

Pasos siguientes