Todos os produtos
Search
Central de documentação

ApsaraDB for MongoDB:Solucionar alta utilização de CPU em uma instância do ApsaraDB for MongoDB

Última atualização: Jun 26, 2026

A alta utilização de CPU em uma instância do ApsaraDB for MongoDB — que às vezes se aproxima de 100% — desacelera as operações de leitura e gravação e interrompe as atividades do negócio. Siga as etapas de diagnóstico abaixo para identificar e resolver a causa raiz.

Verificar operações em execução

Conecte-se à instância usando o mongo shell. Os procedimentos de conexão variam conforme a arquitetura da instância:

Execute db.currentOp() para listar todas as operações em execução na instância:

db.currentOp()

Exemplo de saída:

{
    "desc" : "conn632530",
    "threadId" : "140298196924160",
    "connectionId" : 632530,
    "client" : "11.192.159.236:57052",
    "active" : true,
    "opid" : 1008837885,
    "secs_running" : 0,
    "microsecs_running" : NumberLong(70),
    "op" : "update",
    "ns" : "mygame.players",
    "query" : {
        "uid" : NumberLong(31577677)
    },
    "numYields" : 0,
    "locks" : {
        "Global" : "w",
        "Database" : "w",
        "Collection" : "w"
    },
    ....
}

Analise os campos a seguir para identificar operações problemáticas:

Campo

Descrição

Quando agir

client

Cliente que enviou a solicitação

Use este campo para rastrear a solicitação até sua source

opid

ID exclusivo da operação

Execute db.killOp(opid) para interromper a operação, se necessário

secs_running

Tempo de execução da operação, em segundos

Investigue operações com valores inesperadamente altos

microsecs_running

Tempo de execução da operação, em microssegundos

Investigue operações com valores inesperadamente altos

ns

Namespace (coleção) em verificação

Compare com logs de consultas lentas para encontrar coleções com alta demanda

op

Tipo de operação: query, insert, update ou delete

locks

Informações de bloqueio da operação

Consulte FAQ: Concurrency

Para obter mais informações sobre db.currentOp(), consulte db.currentOp().

Uma causa comum de picos de CPU é uma operação de O&M — como uma varredura completa de coleção — executada simultaneamente à carga de trabalho regular. Se db.currentOp() mostrar uma operação com um valor alto de secs_running inesperado, interrompa-a:

db.killOp(<opid>)

Substitua <opid> pelo valor do campo opid na saída de db.currentOp(). Para mais detalhes, consulte db.killOp().

Analisar logs de consultas lentas

Se a utilização de CPU aumentar imediatamente após o início da aplicação e permanecer alta, mas db.currentOp() não mostrar operações claramente problemáticas, a causa provável é um padrão de consultas lentas acumuladas ao longo do tempo.

Visualize os logs de consultas lentas no console do ApsaraDB for MongoDB. Para mais informações, consulte Visualizar logs de consultas lentas.

Um exemplo de entrada de log de consulta lenta tem a seguinte aparência:

{
  "atype": "slowOp",
  "param": {
    "op": "query",
    "ns": "abbott_analysis.uaidScanInfo",
    "query": {
      "find": "uaidScanInfo",
      "filter": {
        "dateType": 2,
        "companyCode": "GMP"
      },
      "ntoreturn": -1,
      "sort": {
        "scanDateTime": -1
      }
    },
    "keysExamined": 0,
    "docsExamined": 2181021,
    "hasSortStage": true,
    "cursorExhausted": true,
    "numYield": 17059,
    "locks": { ... },
    "nreturned": 0,
    "responseLength": 20,
    "millis": 4878,
    "planSummary": "COLLSCAN"
  },
  "result": "OK"
}

Procure pelos seguintes padrões nos logs de consultas lentas:

Varreduras completas de coleção (COLLSCAN, docsExamined)

planSummary: COLLSCAN indica que a consulta examinou toda a coleção sem utilizar um índice. O campo docsExamined mostra quantos documentos foram verificados — quanto maior esse número, mais CPU a consulta consumiu.

Crie um índice nos campos consultados para corrigir isso:

db.<collection>.createIndex({ <field>: 1 })

Índices ineficientes (IXSCAN, keysExamined)

Quando uma consulta utiliza um índice, planSummary exibe IXSCAN. O campo keysExamined indica quantas chaves de índice foram examinadas. Quanto maior o valor, mais recursos de CPU a solicitação ocupa.

Exemplo de seletividade de índice

Considere uma coleção em que o campo x possui apenas dois valores possíveis (1 ou 2), enquanto y abrange uma faixa muito mais ampla (1 a 100000). Para a consulta { x: 1, y: 2 }:

{ x: 1, y: 1 }
{ x: 1, y: 2 }
...
{ x: 1, y: 100000 }
{ x: 2, y: 1 }
...

Índice

Seletividade

Motivo

db.createIndex({ x: 1 })

Baixa

Metade da coleção compartilha o mesmo valor de x

db.createIndex({ x: 1, y: 1 })

Baixa

O campo principal x ainda tem baixa seletividade

db.createIndex({ y: 1 })

Boa

y tem uma faixa ampla — poucos documentos compartilham o mesmo valor

db.createIndex({ y: 1, x: 1 })

Boa

O campo principal y elimina a maioria dos documentos imediatamente

Indexe primeiro o campo de alta seletividade. Para mais informações, consulte Design Principles of MongoDB Indexes e Compound indexes.

O excesso de índices afeta o desempenho de gravação e atualização. Se sua aplicação envolve um grande volume de operações de escrita e você utiliza índices, o desempenho pode ser impactado. Audite e remova índices não utilizados caso o desempenho de gravação também esteja degradado.

Ordenação em memória (SORT, hasSortStage)

hasSortStage: true significa que a instância ordenou os resultados da consulta em memória porque nenhum índice pôde satisfazer a ordem de classificação. Ordenações em memória para grandes conjuntos de resultados consomem muita CPU.

Se os logs de consultas lentas contiverem a palavra-chave SORT, crie um índice nos campos usados na cláusula de ordenação:

db.<collection>.createIndex({ <sort-field>: 1 })

Outras operações com alto consumo de CPU

A criação de índices e pipelines de aggregation (que combinam travessia, filtragem, atualizações e ordenação) também podem causar alto uso de CPU. Aplique a mesma abordagem de diagnóstico: verifique docsExamined, keysExamined, hasSortStage e planSummary nos logs de consultas lentas.

Avaliar a capacidade do serviço

Se todas as consultas estiverem usando índices apropriados e a utilização de CPU permanecer alta, a instância pode ter atingido seu limite de capacidade.

  1. Revise os dados de monitoramento para entender seu padrão de uso de recursos. Para mais informações, consulte Visualizar dados de monitoramento e Monitoramento de nós (anteriormente monitoramento básico).

  2. Verifique se a especificação atual da instância atende aos requisitos da sua carga de trabalho. Se necessário, faça upgrade da instância. Para mais informações, consulte Alterar as configurações de uma instância ou Alterar as configurações de uma instância de conjunto de réplicas.

Referência rápida

Comando

Finalidade

db.currentOp()

Listar todas as operações em execução na instância

db.killOp(<opid>)

Interromper uma operação específica pelo seu id de operação

Visualize logs de consultas lentas no console

Identificar consultas lentas sem precisar conectar-se à instância