Solución de problemas con consultas de diagnóstico avanzadas con Azure Cosmos DB for NoSQL

SE APLICA A: NoSQL

En este artículo, se explicará cómo escribir consultas más avanzadas para ayudar a solucionar problemas relacionados con la cuenta de Azure Cosmos DB mediante registros de diagnóstico enviados a las tablas de Azure Diagnostics (heredado) y específicas del recurso (versión preliminar) .

Para las tablas de Azure Diagnostics, todos los datos se escriben en una única tabla. Los usuarios especifican qué categoría quieren consultar. Si quiere ver la consulta de texto completo de la solicitud, vea Supervisión de datos de Azure Cosmos DB mediante la configuración de diagnóstico en Azure para obtener información sobre cómo habilitar esta característica.

En el caso de las tablas específicas del recurso, los datos se escriben en tablas individuales para cada categoría del recurso. Se recomienda este modo porque:

  • Facilita considerablemente el trabajo con los datos.
  • Proporciona una mejor detectabilidad de los esquemas.
  • Mejora el rendimiento tanto de la latencia de ingesta como de los tiempos de consulta.

Consultas comunes

Las consultas comunes se muestran en las tablas específicas del recurso y de Azure Diagnostics.

Principales consultas N(10) ordenadas por consumo de unidades de solicitud en un período de tiempo determinado

let topRequestsByRUcharge = CDBDataPlaneRequests 
| where TimeGenerated > ago(24h)
| project  RequestCharge , TimeGenerated, ActivityId;
CDBQueryRuntimeStatistics
| project QueryText, ActivityId, DatabaseName , CollectionName
| join kind=inner topRequestsByRUcharge on ActivityId
| project DatabaseName , CollectionName , QueryText , RequestCharge, TimeGenerated
| order by RequestCharge desc
| take 10

Solicitudes limitadas (statusCode = 429) en un período de tiempo determinado

let throttledRequests = CDBDataPlaneRequests
| where StatusCode == "429"
| project  OperationName , TimeGenerated, ActivityId;
CDBQueryRuntimeStatistics
| project QueryText, ActivityId, DatabaseName , CollectionName
| join kind=inner throttledRequests on ActivityId
| project DatabaseName , CollectionName , QueryText , OperationName, TimeGenerated

Consultas con las longitudes de respuesta más grandes (tamaño de carga de la respuesta del servidor)

let operationsbyUserAgent = CDBDataPlaneRequests
| project OperationName, DurationMs, RequestCharge, ResponseLength, ActivityId;
CDBQueryRuntimeStatistics
//specify collection and database
//| where DatabaseName == "DBNAME" and CollectionName == "COLLECTIONNAME"
| join kind=inner operationsbyUserAgent on ActivityId
| summarize max(ResponseLength) by QueryText
| order by max_ResponseLength desc

Consumo de RU por partición física (en todas las réplicas del conjunto de réplicas)

CDBPartitionKeyRUConsumption
| where TimeGenerated >= now(-1d)
//specify collection and database
//| where DatabaseName == "DBNAME" and CollectionName == "COLLECTIONNAME"
// filter by operation type
//| where operationType_s == 'Create'
| summarize sum(todouble(RequestCharge)) by toint(PartitionKeyRangeId)
| render columnchart

Consumo de RU por partición lógica (en todas las réplicas del conjunto de réplicas)

CDBPartitionKeyRUConsumption
| where TimeGenerated >= now(-1d)
//specify collection and database
//| where DatabaseName == "DBNAME" and CollectionName == "COLLECTIONNAME"
// filter by operation type
//| where operationType_s == 'Create'
| summarize sum(todouble(RequestCharge)) by PartitionKey, PartitionKeyRangeId
| render columnchart  

Pasos siguientes