Solucionar problemas com consultas de diagnóstico

APLICA-SE A: 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