Coleções fragmentadas de desfragmento
Nesta página
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.
Antes de começar
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.
Tarefas
Iniciar manualmente a desfragmentação de uma collection fragmentada
Parar manualmente de desfragmentar uma collection fragmentada
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.
Detalhes
Esta seção descreve detalhes adicionais relacionados à desfragmentação de collection fragmentadas.
Configurar status do balanceamento da collection
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.
operações
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.
Tamanho, balanceamento e desfragmentação da parte
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 Por exemplo, se |
Mais cedo do que MongoDB 6.0 | Quando um pedaço fica maior que |
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.
Saiba mais
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