Partilhar via


Solucionar problemas com consultas de diagnóstico

APLICA-SE A: NoSQL MongoDB Cassandra Gremlin Tabela

Neste artigo, abordamos como escrever consultas simples para ajudar a solucionar problemas com sua conta do Azure Cosmos DB usando logs de diagnóstico enviados para tabelas AzureDiagnostics (legado) e específicas de recursos (visualização).

Para tabelas de Diagnóstico do Azure, todos os dados são gravados em uma única tabela e os usuários precisam especificar qual categoria desejam consultar.

Para tabelas específicas de recursos, os dados são gravados em tabelas individuais para cada categoria do recurso (não disponível para API de tabela). Recomendamos esse modo, pois facilita muito o trabalho com os dados, fornece melhor capacidade de descoberta dos esquemas e melhora o desempenho na latência de ingestão e nos tempos de consulta.

Consultas comuns

Aqui está uma lista de consultas comuns de solução de problemas.

Consulta de operações que estão demorando mais de 3 milissegundos para serem executadas

Encontre operações com duração superior a 3 milissegundos.

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

Consulta de agentes de usuário que estão executando operações

Encontre agentes de usuário associados a cada operação.

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

Consulta para operações de longa duração

Encontre operações que foram executadas por um longo tempo, binbinando seu tempo de execução em intervalos de cinco segundos.

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

Obter estatísticas de chave de partição para avaliar a distorção nas três principais partições de uma conta de banco de dados

Meça a inclinação obtendo estatísticas comuns para partições físicas.

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

Obtenha as taxas de solicitação para consultas caras

Meça a taxa de solicitação (em RUs) para as maiores consultas.

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

Descubra quais operações estão tomando mais RU/s

Classifique as operações pela quantidade de RU/s que estão 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)

Obter todas as consultas que estão consumindo mais de 100 RU/s

Encontre consultas que consomem mais RU/s do que uma quantidade de linha de base.

Esta consulta junta-se aos dados de DataPlaneRequests e 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

Obter as taxas de solicitação e a duração de execução de uma consulta

Obtenha estatísticas tanto na taxa de solicitação quanto na duração de uma 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)

Obter a distribuição para diferentes operações

Operações de grupo pela distribuição de recursos.

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

Obter a taxa de transferência máxima que uma partição consumiu

Obtenha a taxa de transferência máxima para uma partição física.

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

Obter informações sobre o consumo de chaves de partição RU/s por segundo

Meça o consumo de RU/s por segundo por chave de partição.

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 

Obter cobrança de solicitação para uma chave de partição específica

Meça a cobrança de solicitação por chave de partição.

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

Obtenha as principais chaves de partição com a maioria dos RU/s consumidos em um período específico

Classifique as chaves de partição com base no consumo da unidade de solicitação dentro de uma janela de tempo.

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

Obter logs para as chaves de partição cujo tamanho de armazenamento é maior que 8 GB

Encontre logs para chaves de partição filtradas pelo tamanho de armazenamento por chave de partição.

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

Obter latências P99 ou P50 para operações, cobrança de solicitação ou o comprimento da resposta

Medir o desempenho para; latência de operação, uso de RU/s e comprimento de resposta.

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)

Obter logs de plano de controle

Obter plano de controle longo usando ControlPlaneRequests.

Gorjeta

Lembre-se de ativar o sinalizador descrito em Desabilitar acesso de gravação de metadados baseado em chave e executar as operações usando o Azure PowerShell, a CLI do Azure ou o Gerenciador de Recursos do Azure.

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

Próximos passos