Compartir a través de


Solución de problemas con consultas de diagnóstico

En este artículo se explica cómo escribir consultas sencillas para ayudar a solucionar problemas con la cuenta de Azure Cosmos DB mediante registros de diagnóstico enviados a tablas de AzureDiagnostics (heredadas) y específicas de recursos (versión preliminar).

En el caso de las tablas de Azure Diagnostics, todos los datos se escriben en una sola tabla y los usuarios deben especificar qué categoría desea consultar.

En el caso de las tablas específicas de recursos, los datos se escriben en tablas individuales para cada categoría del recurso (no disponible para table API). Se recomienda este modo, ya que facilita mucho 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 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 las operaciones que se ejecutaron durante mucho tiempo mediante la asignació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 estadísticas de clave de partición para evaluar la asimetría entre las tres particiones principales 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 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

Búsqueda de las operaciones que toman la mayoría de las RU/s

Ordene las operaciones por la cantidad de RU/s que usan.

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)

Obtener todas las consultas que consumen más de 100 RU/s

Busque consultas que consuman más RU/s que una cantidad de línea 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 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 diferentes operaciones

Agrupa las operaciones por 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 información sobre el consumo de RU/s de las claves de partición por segundo

Mida el consumo de RU/s por segundo por clave de partición.

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 solicitud para 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" 

Obtener las claves de partición principales con la mayoría de las RU/s consumidas en un período específico

Ordene las claves de partición en función del consumo de unidades 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

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

Busque registros para 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

Obtener latencias P99 o P50 para operaciones, cargo de solicitud o la longitud de la respuesta

Medir el rendimiento de; latencia de operación, uso de RU/s y longitud 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 de registros del plano de control

Obtenga el plano de control de larga duración mediante ControlPlaneRequests.

Sugerencia

Recuerde activar la marca descrita en Deshabilitar el acceso de escritura de metadatos basados en claves y ejecutar las operaciones mediante Azure PowerShell, la CLI de Azure o Azure Resource Manager.

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

Pasos siguientes