Todos os produtos
Search
Central de documentação

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

Última atualização: Jun 26, 2026

Quando a utilização do disco em uma instância do ApsaraDB for MongoDB atinge 100%, a instância fica indisponível e as gravações são bloqueadas. Adote medidas preventivas quando a utilização ultrapassar 80%: reduza o uso do disco ou expanda o armazenamento antes que a instância fique offline.

Este tópico explica como identificar o consumo de espaço em disco e resolver as causas mais comuns de alta utilização.

Verificar o uso do disco

Instâncias de conjunto de réplicas

Acesse o console do ApsaraDB for MongoDB e utilize um dos métodos a seguir.

Visão geral

Acesse Basic Information e localize a seção Specification Information. Os campos Disk Space e Utilization exibem o uso atual rapidamente.

Monitoring charts

No painel de navegação à esquerda, clique em Monitoring Data. Selecione um nó para visualizar as métricas Disk Usage (Bytes) e Disk Usage (%).

Uma instância de conjunto de réplicas inclui um nó primário (leitura/gravação), um ou mais nós secundários de alta disponibilidade, um nó oculto e nós opcionais somente leitura. O espaço em disco em cada nó segue esta fórmula:

ins_size = data_size + log_size

Componente

Conteúdo

data_size

Arquivos de dados físicos (nomes iniciados com collection), arquivos de índice (nomes iniciados com index) e arquivos de metadados como WiredTiger.wt. Exclui dados do banco de dados local.

log_size

Tamanho físico do banco de dados local, logs de tempo de execução do MongoDB e alguns logs de auditoria.

Análise detalhada

Para obter um detalhamento por coleção, use comandos do MongoDB ou o CloudDBA:

  • Execute db.stats() para ver estatísticas de armazenamento no nível do banco de dados. Execute db.$collection_name.stats() para obter detalhes no nível da coleção, incluindo tamanho do índice, tamanho dos dados, taxa de compressão e tamanho médio do documento. Consulte a referência do MongoDB para db.stats(), db.collection.stats(), db.collection.storageSize(), db.collection.totalIndexSize() e db.collection.totalSize().

  • Acesse CloudDBA > Storage Analysis. A página Storage Analysis exibe o uso de disco por banco de dados e coleção, crescimento médio diário, previsão de dias até o esgotamento do armazenamento e detalhes de coleções anômalas.

Instâncias de cluster fragmentado

Acesse o console do ApsaraDB for MongoDB e utilize um dos métodos a seguir.

Monitoring charts

Na página Monitoring Data, selecione um nó para visualizar as métricas Disk Usage (Bytes) e Disk Usage (%) desse nó.

Comandos

Execute db.stats() e db.$collection_name.stats() em cada nó para analisar o uso de disco por shard.

Causas comuns e resoluções

Fragmentação de disco após operações compact

A execução de db.runCommand({compact:"collectionName"}) recupera espaço fragmentado, mas aumenta temporariamente o uso do disco durante o processo. Se uma coleção acumulou fragmentação significativa, o comando compact é a ferramenta adequada. Execute-o primeiro em um nó secundário e depois acione um failover primário/secundário para minimizar o impacto na aplicação.

Resolver

Execute o compact em um nó secundário primeiro e, em seguida, acione um failover primário/secundário para minimizar o impacto na aplicação:

db.runCommand({compact: "<collectionName>"})

Substitua <collectionName> pelo nome real da coleção. Para coleções grandes, execute o compact fora do horário de pico.

Para instruções passo a passo, consulte Desfragmentar os discos de uma instância para aumentar a utilização do disco.

Verificar

Após a conclusão do compact, execute novamente db.$collection_name.stats() e confirme se storageSize diminuiu. Verifique também Disk Usage (Bytes) em Monitoring Data para confirmar a redução.

Uso excessivo de espaço de log

Journals crescendo sem limite (MongoDB anterior à versão 4,0)

Em versões do MongoDB anteriores à 4,0, se o número de arquivos abertos no host atingir o limite do sistema, as threads de limpeza no servidor de log do MongoDB encerram silenciosamente. Consequentemente, os arquivos de journal crescem sem limite.

Procure entradas semelhantes às seguintes nos logs de tempo de execução da instância:

2019-08-25T09:45:16.867+0800 I NETWORK [thread1] Listener: accept() returns -1 Too many open files in system
2019-08-25T09:45:17.000+0800 I - [ftdc] Assertion: 13538:couldn't open [/proc/55692/stat] Too many open files in system src/mongo/util/processinfo_linux.cpp 74
2019-08-25T09:45:17.002+0800 W FTDC [ftdc] Uncaught exception in 'Location13538: couldn't open [/proc/55692/stat] Too many open files in system' in full-time diagnostic data capture subsystem. Shutting down the full-time diagnostic data capture subsystem.

Resolver

Atualize o MongoDB para a versão 4,0 ou posterior. Como medida temporária, reinicie o processo mongod. Consulte o relatório de bug upstream: WT-4083.

Verificar

Após a atualização ou reinicialização, confirme se os arquivos de journal pararam de crescer verificando Disk Usage (Bytes) em Monitoring Data durante uma janela de 10 a 15 minutos.

Oplog consumindo espaço crescente após atraso de replicação ou backup físico

Dois cenários fazem com que o espaço do oplog expanda e não diminua automaticamente:

  • Atraso de replicação: Quando os nós secundários ficam atrasados, o espaço disponível do oplog deixa de ser limitado pelo tamanho fixo da coleção no arquivo de configuração. Ele pode chegar a 20% do espaço em disco provisionado para a instância. Após a resolução do atraso, o espaço físico não é liberado automaticamente.

  • Backup físico em um nó oculto: Um grande número de checkpoints é gerado durante o backup, produzindo um volume substancial de dados de log.

Resolver

Execute o compact na coleção oplog:

Nota

Todas as operações de gravação são bloqueadas durante a operação compact.

db.grantRolesToUser("root", [{db: "local", role: "dbAdmin"}])
use local
db.runCommand({ compact: "oplog.rs", force: true })

Verificar

Após a operação, verifique Disk Usage (Bytes) em Monitoring Data para confirmar se o espaço de log diminuiu no nó afetado.

Uso desigual de disco entre shards

Escolha inadequada de chave de shard: baixa cardinalidade

Se a maioria dos dados concentrar-se em um pequeno número de chunks — enquanto a contagem de chunks entre os shards permanece equilibrada — a causa raiz é uma chave de shard de baixa cardinalidade.

Quando uma chave de shard possui poucos valores distintos, o balanceador consegue dividir e migrar chunks, mas não consegue dividir um chunk cujos documentos compartilham o mesmo valor de chave. O resultado é uma contagem de chunks aparentemente equilibrada, mas com tamanhos de dados altamente desproporcionais.

Procure avisos na saída de sh.status():

2019-08-27T13:31:22.076+0800 W SHARDING [conn12681919] possible low cardinality key detected in superHotItemPool.haodanku_all - key is { batch: "201908260000" }
2019-08-27T13:31:22.076+0800 W SHARDING [conn12681919] possible low cardinality key detected in superHotItemPool.haodanku_all - key is { batch: "201908260200" }
2019-08-27T13:31:22.076+0800 W SHARDING [conn12681919] possible low cardinality key detected in superHotItemPool.haodanku_all - key is { batch: "201908260230" }

Resolver

Redesenhe a chave de shard usando um campo de alta cardinalidade. Considere o sharding com hash, que distribui os dados uniformemente aplicando uma função de hash aos valores da chave de shard. O sharding por intervalo distribui os dados por faixa de valor, o que tende a concentrar as gravações em um único chunk. Consulte conceitos de chave de shard, sharding com hash e sharding por intervalo.

Quando um chunk atinge 64 MB, o MongoDB cria um novo chunk vazio para que a migração possa continuar. Se os chunks estiverem equilibrados, mas os tamanhos dos dados diferirem muito entre os shards, uma chave de shard de baixa cardinalidade é a causa provável.

Bancos de dados não fragmentados criando um shard jumbo

Os dados de um banco de dados não fragmentado residem inteiramente em um único shard. Se esse banco de dados for grande, um shard acabará retendo significativamente mais dados do que os outros. A mesma situação pode ocorrer ao importar dados para uma instância de cluster fragmentado que não estava fragmentada antes da importação.

Resolver

Escolha a ação apropriada conforme a sua situação:

Situação

Ação

Importação ainda não iniciada

Fragmente a instância de destino antes de importar os dados

Vários bancos de dados não fragmentados com tamanhos semelhantes

Execute o comando movePrimary para distribuir cada banco de dados para um shard diferente

Um único banco de dados não fragmentado grande

Fragmente o banco de dados ou migre-o para uma instância dedicada de conjunto de réplicas

Espaço em disco suficiente

Nenhuma ação necessária

Para mais informações sobre como os chunks são particionados e divididos, consulte Particionamento de dados com chunks e Dividir chunks em um cluster fragmentado.

Fragmentação de disco devido a operações moveChunk

Ao migrar um chunk, o balanceador remove os documentos de origem após gravá-los no destino. Por padrão, essa remoção não libera o espaço físico em disco — os arquivos de dados e de índice do mecanismo WiredTiger retêm o espaço até que ele seja explicitamente recuperado. Isso é comum quando se adiciona sharding a uma instância em execução há algum tempo.

Resolver

Execute o compact em cada shard afetado para recuperar o espaço fragmentado:

db.runCommand({compact: "<collectionName>"})

Consulte Migrar intervalos em um cluster fragmentado e Gerenciar o balanceador de cluster fragmentado para obter contexto sobre o comportamento do moveChunk.

Verificar

Após a conclusão do compact em cada shard, compare os valores de Disk Usage (Bytes) entre os shards em Monitoring Data para confirmar se a distribuição está mais uniforme.

Próximos passos

  • Se o uso do disco continuar crescendo após resolver a causa imediata, expanda o espaço de armazenamento da instância pelo console do ApsaraDB for MongoDB.

  • Revise o design da chave de shard para evitar a recorrência da distorção de dados.

  • Agende operações compact periodicamente fora do horário de pico para manter a fragmentação sob controle.

Planejamento do produto MongoDB da Alibaba Cloud para otimização de uso de espaço

  • Separação de computação e armazenamento

    Atualmente, um único nó físico do MongoDB da Alibaba Cloud suporta no máximo 3 TB de espaço de armazenamento. Se o volume de dados de um nó em arquitetura de nó único ou de conjunto de réplicas exceder 3 TB, será necessário dividir a carga de trabalho ou atualizar a instância para uma arquitetura de cluster fragmentado. Além disso, a expansão de especificações envolve migração de dados, o que resulta em tempo de execução prolongado.

    Para resolver esses problemas, o MongoDB da Alibaba Cloud oferecerá suporte a discos em nuvem na arquitetura de conjunto de réplicas, permitindo a separação entre computação e armazenamento. Com o armazenamento em disco na nuvem, o limite de armazenamento de dados por nó atingirá dezenas de TB, e a arquitetura nativa da nuvem proporcionará capacidade de expansão em minutos.

  • Backup via snapshot do ECS

    Nas versões mais recentes das instâncias do MongoDB da Alibaba Cloud, devido à maturidade crescente da tecnologia de reprodução multithread do oplog, praticamente não há mais problemas de atraso em réplicas secundárias. Portanto, o kernel do MongoDB da Alibaba Cloud não realiza mais modificações personalizadas no oplog, mantendo compatibilidade com o formato oficial de "coleção fixa". Problemas de ampliação do oplog causados por atrasos em réplicas secundárias podem ser resolvidos simplesmente atualizando para a versão mais recente do kernel.

    Além disso, o MongoDB da Alibaba Cloud desenvolve backups de instâncias MongoDB utilizando a tecnologia de snapshot do ECS. Em caso de falha, isso permitirá ignorar o demorado download de backups físicos do OSS, alcançando capacidade de recuperação em minutos. Adicionalmente, o uso de snapshots do ECS para backup resolverá o problema de aumento de espaço no nó Hidden, que pode ocorrer com os métodos tradicionais de backup físico.

  • Otimização e modificação do kernel para o comando Compact

    O comando Compact no MongoDB 4.4 não bloqueia operações de leitura e escrita. O MongoDB da Alibaba Cloud portou esse patch para o nível do kernel nas versões 3,4 e superiores do ApsaraDB for MongoDB, viabilizando a desfragmentação de espaço como recurso de produto por meio do console DAS.