Compartilhar via


Solucionar problemas com consultas de diagnóstico avançadas com o Azure Cosmos DB para NoSQL

Neste artigo, abordaremos como escrever consultas mais avançadas para ajudar a solucionar problemas com sua conta do Azure Cosmos DB usando logs de diagnóstico enviados para Diagnósticos do Azure (herdado) e tabelas específicas de recurso (versão prévia).

Para as tabelas do Diagnóstico do Azure, todos os dados são gravados em uma única tabela. Os usuários especificam a categoria que desejam consultar. Se você quiser exibir a consulta de texto completo de sua solicitação, confira Monitore dados do Azure Cosmos DB usando configurações de diagnóstico no Azure para saber como habilitar esse recurso.

Para tabelas específicas dos recursos, os dados são gravados em tabelas individuais para cada categoria do recurso. Recomendamos esse modo porque:

  • Facilita o trabalho com os dados.
  • Fornece melhor detectabilidade dos esquemas.
  • Melhora o desempenho entre a latência de ingestão e os tempos de consulta.

Consultas comuns

Consultas comuns são mostradas nas tabelas específicas do recurso e do Diagnóstico do Azure.

Principais N(10) consultas ordenadas pelo consumo de RU (Unidades de Solicitação) em um período específico

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

Solicitações limitadas (statusCode = 429) em uma janela de tempo específica

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 com os maiores comprimentos de resposta (tamanho da carga da resposta do 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 partição física (em todas as réplicas no 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 partição lógica (em todas as réplicas no 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  

Próximas etapas