Problemas de resolução de problemas com consultas de diagnóstico

APLICA A: SQL API Cassandra API API API API Table API Azure Cosmos DB API para MongoDB

Neste artigo, vamos cobrir como escrever consultas simples para ajudar a resolver problemas com a sua conta DB Azure Cosmos usando registos de diagnóstico enviados para tabelas AzureDiagnostics (legado) e recursos específicos (pré-visualização ).

Para Diagnóstico do Azure tabelas, todos os dados são escritos numa única tabela e os utilizadores terão de especificar qual a categoria que gostariam de consultar.

Para tabelas específicas de recursos, os dados são escritos em tabelas individuais para cada categoria do recurso (não disponível para a tabela API). Recomendamos este modo, uma vez que torna muito mais fácil trabalhar com os dados, proporciona uma melhor descoberta dos esquemas, e melhora o desempenho em termos de latência e tempos de consulta.

Consultas AzureDiagnostics

  • Como consultar as operações que estão a demorar mais de 3 milissegundos a executar:

    AzureDiagnostics 
    | where toint(duration_s) > 3 and ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
    | summarize count() by clientIpAddress_s, TimeGenerated
    
  • Como consultar o agente utilizador que está a executar as operações:

    AzureDiagnostics 
    | where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
    | summarize count() by OperationName, userAgent_s
    
  • Como consultar as operações de longa duração:

    AzureDiagnostics 
    | where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
    | project TimeGenerated , duration_s 
    | summarize count() by bin(TimeGenerated, 5s)
    | render timechart
    
  • Como obter estatísticas-chave de partição para avaliar o desvio entre as 3 principais divisórias para uma conta de base de dados:

    AzureDiagnostics 
    | where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="PartitionKeyStatistics" 
    | project SubscriptionId, regionName_s, databaseName_s, collectionName_s, partitionKey_s, sizeKb_d, ResourceId 
    
  • Como obter os pedidos de consultas caras?

    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
    
  • Como descobrir que operações estão a tomar a maior parte do RU/s?

    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)
    
  • Como obter todas as consultas que estão a consumir mais de 100 RU/s juntas com 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
    
  • Como obter as acusações de pedido e a duração da execução de uma consulta?

    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)
    
  • Como obter a distribuição para diferentes operações?

    AzureDiagnostics
    | where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
    | where TimeGenerated >= ago(2h) 
    | summarize count = count()  by OperationName, requestResourceType_s, bin(TimeGenerated, 1h) 
    
  • Qual é a produção máxima que uma divisória consumiu?

    AzureDiagnostics
    | where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
    | where TimeGenerated >= ago(2h) 
    | summarize max(requestCharge_s) by bin(TimeGenerated, 1h), partitionId_g
    
  • Como obter a informação sobre as chaves de partição ru/s consumo por segundo?

    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 
    
  • Como obter a taxa de pedido de uma chave de partição específica

    AzureDiagnostics 
    | where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption" 
    | where parse_json(partitionKey_s)[0] == "2" 
    
  • Como obter as chaves de partição superior com a maioria ru/s consumidas num período específico?

    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
    
  • Como obter os registos das chaves de partição cujo tamanho de armazenamento é superior a 8 GB?

    AzureDiagnostics
    | where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="PartitionKeyStatistics"
    | where todouble(sizeKb_d) > 800000
    
  • Como obter latncios de replicação P99 ou P50 para operações, taxa de pedido ou duração 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)
    
  • Como obter registos do ControlPlane?

    Lembre-se de ligar a bandeira como descrito no artigo de acesso baseado em metadados baseado em chave para desativar e executar as operações utilizando Azure PowerShell, o Azure CLI ou Azure Resource Manager.

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

Consultas específicas de recursos

  • Como consultar as operações que estão a demorar mais de 3 milissegundos a executar:

    CDBDataPlaneRequests 
    | where toint(DurationMs) > 3
    | summarize count() by ClientIpAddress, TimeGenerated
    
  • Como consultar o agente utilizador que está a executar as operações:

      CDBDataPlaneRequests
      | summarize count() by OperationName, UserAgent
    
  • Como consultar as operações de longa duração:

      CDBDataPlaneRequests
      | project TimeGenerated , DurationMs 
      | summarize count() by bin(TimeGenerated, 5s)
      | render timechart
    
  • Como obter estatísticas-chave de partição para avaliar o desvio entre as 3 principais divisórias para uma conta de base de dados:

      CDBPartitionKeyStatistics
      | project RegionName, DatabaseName, CollectionName, PartitionKey, SizeKb
    
  • Como obter os pedidos de consultas caras?

      CDBDataPlaneRequests
      | where todouble(RequestCharge) > 10.0
      | project ActivityId, RequestCharge
      | join kind= inner (
      CDBQueryRuntimeStatistics
      | project ActivityId, QueryText
      ) on $left.ActivityId == $right.ActivityId
      | order by RequestCharge desc
      | limit 100
    
  • Como descobrir que operações estão a tomar a maior parte do RU/s?

    CDBDataPlaneRequests
    | where TimeGenerated >= ago(2h) 
    | summarize max(ResponseLength), max(RequestLength), max(RequestCharge), count = count() by OperationName, RequestResourceType, UserAgent, CollectionName, bin(TimeGenerated, 1h)
    
  • Como obter todas as consultas que estão a consumir mais de 100 RU/s juntas com dados de DataPlaneRequests e QueryRunTimeStatistics.

      CDBDataPlaneRequests
      | where todouble(RequestCharge) > 100.0
      | project ActivityId, RequestCharge
      | join kind= inner (
      CDBQueryRuntimeStatistics
      | project ActivityId, QueryText
      ) on $left.ActivityId == $right.ActivityId
      | order by RequestCharge desc
      | limit 100
    
  • Como obter as acusações de pedido e a duração da execução de uma consulta?

      CDBQueryRuntimeStatistics
      | join kind= inner (
      CDBDataPlaneRequests
      ) on $left.ActivityId == $right.ActivityId
      | project DatabaseName, CollectionName, OperationName , QueryText, RequestCharge, DurationMs, bin(TimeGenerated, 1min)
    
  • Como obter a distribuição para diferentes operações?

      CDBDataPlaneRequests
      | where TimeGenerated >= ago(2h) 
      | summarize count = count()  by OperationName, RequestResourceType, bin(TimeGenerated, 1h)
    
  • Qual é a produção máxima que uma divisória consumiu?

    CDBDataPlaneRequests
    | where TimeGenerated >= ago(2h) 
    | summarize max(RequestCharge) by bin(TimeGenerated, 1h), PartitionId
    
  • Como obter a informação sobre as chaves de partição ru/s consumo por segundo?

    CDBPartitionKeyRUConsumption 
    | summarize total = sum(todouble(RequestCharge)) by DatabaseName, CollectionName, PartitionKey, TimeGenerated 
    | order by TimeGenerated asc 
    
  • Como obter a taxa de pedido de uma chave de partição específica?

    CDBPartitionKeyRUConsumption  
    | where parse_json(PartitionKey)[0] == "2" 
    
  • Como obter as chaves de partição superior com a maioria ru/s consumidas num período específico?

    CDBPartitionKeyRUConsumption
    | where TimeGenerated >= datetime("02/12/2021, 11:20:00.000 PM") and TimeGenerated <= datetime("05/12/2021, 11:30:00.000 PM") 
    | summarize total = sum(todouble(RequestCharge)) by DatabaseName, CollectionName, PartitionKey 
    | order by total desc
    
  • Como obter os registos das chaves de partição cujo tamanho de armazenamento é superior a 8 GB?

    CDBPartitionKeyStatistics
    | where todouble(SizeKb) > 800000
    
  • Como obter latncios de replicação P99 ou P50 para operações, taxa de pedido ou duração da resposta?

    CDBDataPlaneRequests
    | where TimeGenerated >= ago(2d)
    | summarize percentile(todouble(ResponseLength), 50), percentile(todouble(ResponseLength), 99), max(ResponseLength), percentile(todouble(RequestCharge), 50), percentile(todouble(RequestCharge), 99), max(RequestCharge), percentile(todouble(DurationMs), 50), percentile(todouble(DurationMs), 99), max(DurationMs),count() by OperationName, RequestResourceType, UserAgent, CollectionName, bin(TimeGenerated, 1h)
    
  • Como obter registos do ControlPlane?

    Lembre-se de ligar a bandeira como descrito no artigo de acesso baseado em metadados baseado em chave para desativar e executar as operações utilizando Azure PowerShell, o Azure CLI ou Azure Resource Manager.

    CDBControlPlaneRequests
    | summarize by OperationName 
    

Passos seguintes