Definição
unshardCollectionDesfragmenta uma collection fragmentada existente e move os dados da collection para um único shard. Quando você desfragmenta uma collection, a collection não pode ser particionada em váriosshards e a chave de shard é removida.
Novidades na versão 8.0.
Dica
Em
mongosh, este comando também pode ser executado por meio desh.unshardCollection().Os métodos auxiliares são práticos para os usuários
mongosh, mas podem não retornar o mesmo nível de informações que os comandos do banco de dados. Nos casos em que a praticidade não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.Este comando deve ser executado no banco de banco de dados
admin.Se a collection tiver uma configuração de zona aplicada, você deverá primeiro remover as associações de intervalo e os shards da zona antes de desfragmentar a collection. Para obter mais informações, consulte Não fragmentar zonas.
Observação
A desfragmentação de uma collection é uma operação de gravação intensiva que pode resultar em uma taxa de crescimento de oplog maior. Para ajudar a mitigar isso, considere as seguintes alterações de configuração:
Para evitar o crescimento ilimitado do oplog, defina um tamanho fixo de oplog.
Para reduzir a chance de os secundários se tornarem obsoletos, aumente o tamanho do oplog.
Para obter mais detalhes, consulte o oplog Conjunto de réplicas.
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Observação
Esta tarefa não está disponível nas camadas gratuitas ou flexíveis do MongoDB Atlas .
Restrições
Não é possível usar unshardCollection para collections de Queryable Encryption.
Sintaxe
db.adminCommand( { unshardCollection: "<database>.<collection>", toShard: "<shard-id>" } )
Campos de comando
Campo | Tipo | necessidade | Descrição |
|---|---|---|---|
| string | Obrigatório | Especifica o banco de dados de dados e a collection a serem desfragmentadas. |
| string | Opcional | Especifica o ID de shard do destinatário. À medida que o MongoDB desfragmenta a coleta, ele move os dados da coleta de seus fragmentos atuais para esse fragmento específico. Se não especificado, o cluster seleciona o shard com a menor quantidade de dados. |
Considerações
unshardCollectionsó pode ser executado em clusters fragmentados.unshardCollectionsó pode operar em collections fragmentadas.unshardCollectionsó pode operar em uma única collection por vez.unshardCollectiontem uma duração mínima de 5 minutos.É necessário reconstruir os índices do MongoDB Search após a execução de
unshardCollection.Você não pode fazer alterações na topologia , como adicionar ou remover fragmentos ou fazer a transição entre servidores de configuração incorporados e dedicados, até que
unshardCollectionseja concluído.Não é possível executar as seguintes operações na collection que está sendo desfragmentada enquanto
unshardCollectionestiver em andamento:Você não pode executar as seguintes operações no cluster enquanto o
unshardCollectionestiver em andamento:As compilações de índice que ocorrem enquanto
unshardCollectionestá em andamento podem falhar silenciosamente.Não crie índices enquanto
unshardCollectionestiver em andamento.Não chame
unshardCollectionse houver construções de índice em andamento.
Para evitar erros, o MongoDB descarta automaticamente as zonas da sua coleção quando você executa o
unshardCollection.
Requisitos
Antes de desfragmentar sua collection, certifique-se de atender aos seguintes requisitos:
Seu aplicação pode tolerar um período de dois segundos em que a collection afetada bloqueia as gravações. Durante o período em que as gravações são bloqueadas, seu aplicação experimenta um aumento na latência.
Seu banco de dados atende aos seguintes requisitos de recursos:
Verifique se o fragmento para o qual você está movendo a collection tem espaço de armazenamento suficiente para a collection e seus índices. O fragmento de destino exige pelo menos
( Collection storage size + Index Size ) * 2bytes disponíveis.Certifique-se de que sua capacidade de E/S esteja abaixo de 50%.
Certifique-se de que a carga da CPU esteja abaixo de 80%.
Comportamento
Zonas de não fragmentação
Para desfazer a fragmentação de uma collection que usa fragmentação de zona , você deve primeiro parar o balanceador e, em seguida, remover o intervalo e o shard da zona.
Exemplos
Desfragmentar uma collection
O exemplo a seguir desfragmenta a collection sales.eu_accounts :
db.adminCommand( { unshardCollection: "sales.eu_accounts" } )
Desfragmentar para um fragmento específico
O exemplo a seguir fragmenta as collections sales.us_accounts e coloca os dados da collection em shard1:
db.adminCommand( { unshardCollection: "sales.eu_accounts", toShard: "shard1" } )