Solucionar problemas com consultas de diagnóstico
APLICA-SE AO: NoSQL MongoDB Cassandra Gremlin Table
Neste artigo, abordamos como gravar consultas simples para ajudar a solucionar problemas com sua conta do Azure Cosmos DB usando logs de diagnóstico enviados para tabelas do AzureDiagnostics (herdadas) e Específicas de recursos (versão prévia).
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 gostariam de 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 este modo pois ele torna mais fácil de se trabalhar com os dados, fornece melhor detectabilidade dos esquemas, e melhora o desempenho tanto na latência de ingestão quanto nos tempos de consulta.
Consultas comuns
Aqui está uma lista de consultas comuns de solução de problemas.
Consulta de operações que demoram mais de 3 milissegundos para serem executadas
Localize operações que tenham uma duração maior do que 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
Localize agentes de usuário associados a cada operação.
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| summarize count() by OperationName, userAgent_s
Consulta de operações de execução longa
Localize as operações que foram executadas por um longo tempo compartimentalizando o runtime 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 entre as três principais partições para uma conta de banco de dados
Meça a distorçã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
Obter os preços de solicitação para consultas caras
Meça o preço da 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
Descobrir quais operações estão tomando a maioria das RU/s
Classifique as operações pela quantidade de RU/s que elas 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
Localize consultas que consomem mais RU/s do que uma quantidade da linha de base.
Essa consulta se une 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 os preços de solicitação e a duração da execução de uma consulta
Obtenha estatísticas do preço de solicitação e da 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 operações diferentes
Agrupe operações 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 as informações sobre o consumo de RU/s das chaves de partição 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 os preços de solicitação para uma chave de partição específica
Meça o preço de solicitação por chave de partição.
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption"
| where parse_json(partitionKey_s)[0] == "2"
Obter as principais chaves de partição com a maioria das RU/s consumidas em um período específico
Classifique as chaves de partição com base no consumo de 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
Localize logs para chaves de partição filtradas pelo tamanho do armazenamento por chave de partição.
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="PartitionKeyStatistics"
| where todouble(sizeKb_d) > 800000
Obter as latências de P99 ou P50 para operações, o preço de solicitação ou o comprimento da resposta
Meça o desempenho de; latência de operação, uso de RU/s e comprimento da 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 do painel de controle
Obtenha o log do painel de controle usando ControlPlaneRequests
.
Dica
Lembre-se de alternar para 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 Azure Resource Manager.
AzureDiagnostics
| where Category =="ControlPlaneRequests"
| summarize by OperationName
Próximas etapas
- Para obter mais informações sobre como criar configurações de diagnóstico para o Azure Cosmos DB, confira Criando configurações de diagnóstico.
- Para obter informações detalhadas sobre como criar uma configuração de diagnóstico usando o portal do Azure, a CLI ou o PowerShell, confira Criar configuração de diagnóstico para coletar logs e métricas de plataforma no Azure.