Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

Coleções fragmentadas de desfragmento

Nesta página

  • Antes de começar
  • Tarefas
  • Detalhes
  • Saiba mais

A fragmentação é onde os dados de uma coleção fragmentada são divididos em um número desnecessariamente grande de pequenos blocos. Isso pode aumentar os tempos de operação das operações CRUD executadas nessa coleção. A desfragmentação reduz o número de chunks mesclando chunks menores em maiores, resultando em tempos de operação CRUD mais baixos.

Se os tempos de operação CRUD forem aceitáveis, você não precisará desfragmentar as coleções.

A tabela a seguir resume as informações de desfragmentação para várias versões MongoDB .

Versão do MongoDB
Descrição
MongoDB 7.0 e posterior
Os chunks são mesclados automaticamente. As melhorias de desempenho da desfragmentação de uma collection no MongoDB 7.0 são menores em comparação com o MongoDB 6.0. Normalmente, você não precisa desfragmentar coleções começando no MongoDB 7.0.
MongoDB 6.0 e anterior a 7.0

Só desfragmente coleções se os tempos de operações CRUD estiverem mais longos quando a migração das partes ou dos nós começar.

A partir do MongoDB 6.0, o alto tráfego de gravação não deve causar fragmentação. Migrações de partes causam fragmentação.

Mais cedo do que MongoDB 6.0
Desfragmente coleções somente se você enfrentar tempos de operação CRUD mais longos durante atualizações de metadados. Para versões do MongoDB anteriores a 6.0, uma coleção fragmentada torna-se fragmentada quando o tamanho da coleção aumenta significativamente devido a muitas operações de inserção ou atualização.

Para desfragmentar uma coleção fragmentada, use a opção configureCollectionBalancing do comando defragmentCollection . A opção está disponível a partir de MongoDB 6.0.

Considere estes problemas antes de desfragmentar collection:

  • A desfragmentação pode causar muitas atualizações de metadados nos shards. Se suas operações CRUD já estiverem demorando mais do que o normal durante as migrações, você só deverá executar a desfragmentação durante uma janela de balanceamento de fragmentos para reduzir a carga de trabalho do sistema.

  • Se a desfragmentação estiver afetando a carga de trabalho e a latência CRUD no cluster, você poderá reduzir o impacto usando o parâmetro chunkDefragmentationThrottlingMS .

  • As partes mescladas perdem o histórico de canais.

    • Isso significa que, enquanto a desfragmentação estiver em execução, as leituras de snapshots e, indiretamente, a transação, podem falhar com erros de histórico de partes obsoletos.

    • O histórico de canais registra os fragmentos em que uma parte foi armazenada. A desfragmentação apaga o histórico de canais e algumas operações podem falhar, mas normalmente são resolvidas após cerca de cinco minutos.

  • A desfragmentação afeta a localização dos documentos em uma collection movendo dados entre shards. Se uma coleção tiver intervalos de dados que são acessados com frequência, após a desfragmentação da coleção, é possível que os dados acessados com frequência estejam em um fragmento. Isso pode diminuir o desempenho das operações CRUD colocando a carga de trabalho em um fragmento em vez de vários fragmentos.

Observação

Normalmente, você deve usar uma janela de balanceamento de fragmentos para especificar quando o balanceador é executado em vez de iniciar e parar manualmente a desfragmentação.

Esta seção descreve detalhes adicionais relacionados à desfragmentação de collection fragmentadas.

O campo defragmentCollection retornado pelo comando configureCollectionBalancing é somente true quando a desfragmentação está em execução.

Após a desfragmentação terminar automaticamente ou você parar manualmente a desfragmentação, o campo defragmentCollection será removido do documento retornado.

As leituras de nó secundário são permitidas durante a desfragmentação, mas podem levar mais tempo para serem concluídas até que as atualizações de metadados no nó primário sejam replicadas para os nós secundários.

Para obter detalhes sobre o balanceador do MongoDB, consulte Balanceador de Cluster Fragmentado.

Para uma introdução ao chunkSize, consulte Modificar o Tamanho do Intervalo em um Cluster fragmentado.

A tabela a seguir descreve como o chunkSize afeta a desfragmentação e as operações do balanceador em diferentes versões MongoDB.

Versão do MongoDB
Descrição
MongoDB 6.0 e posterior

Quando os dados de coleta compartilhados entre dois estilhaços diferem em três ou mais vezes a configuração de chunkSize configurada, o balanceador migra partes entre os fragmentos.

Por exemplo, se chunkSize for de 128 MB e os dados de coleta forem diferentes em 384 MB ou mais, o balanceador migrará partes entre os estilhaços.

Mais cedo do que MongoDB 6.0
Quando um pedaço fica maior que chunkSize, o pedaço é dividido.

Quando blocos são movidos, divididos ou mesclados, os metadados do fragmento são atualizados após a operação do bloco ser cometida por um servidor de configuração. Os fragmentos não envolvidos na operação de bloco também são atualizados com novos metadados.

O tempo para a atualização de metadados do fragmento é proporcional ao tamanho da tabela de roteamento. As operações CRUD na coleção são temporariamente bloqueadas enquanto os metadados de fragmento são atualizados, e uma tabela de roteamento menor significa atrasos de operação CRUD mais curtos.

Desfragmentar uma coleção reduz o número de blocos e o tempo para atualizar os metadados de bloco.

Para reduzir a carga de trabalho do sistema, configure o balanceador para ser executado somente em um horário específico usando uma janela de balanceamento de fragmentos. A desfragmentação é executada durante o período da janela de equilíbrio.

Você pode utilizar o parâmetro chunkDefragmentationThrottlingMS para limitar a taxa de comandos de divisão e mesclagem executados pelo balanceador.

Você pode iniciar e parar a desfragmentação a qualquer momento.

Você também pode definir uma zona de fragmento. Uma zona de fragmento é baseada na chave de fragmento e você pode associar cada zona a um ou mais fragmentos em um cluster.

A partir do MongoDB 6.0, um cluster fragmentado divide apenas as partes quando as partes devem ser migradas. Isso significa que o tamanho da parte pode exceder chunkSize. Blocos maiores reduzem o número de blocos em um fragmento e melhoram o desempenho porque o tempo para atualizar os metadados do fragmento é reduzido. Por exemplo, você pode ver um bloco de 1 TB em um fragmento, mesmo que tenha configurado chunkSize para 256 MB.

chunkSize afeta o seguinte:

  • Quantidade máxima de dados que o balanceador tenta migrar entre dois fragmentos em uma única operação de migração de bloco.

  • Quantidade de dados migrados durante a desfragmentação.

  • Introdução à fragmentação, consulte Fragmentação

  • Partição de dados com blocos, consulte Particionamento de dados com blocos

  • Configurar o balanceamento de collection, consulte configureCollectionBalancing

  • Examine o status da collection do balancer; consulte balancerCollectionStatus

  • Configurar janelas de balanceamento de shards, consulte Agendar a janela de balanceamento

  • Monitore fragmentos usando o MongoDB Atlas, consulte Analisar clusters fragmentados

Voltar

Config Database