Definição
unshardCollectionDesfaz a fragmentação de uma coleção fragmentada existente e move os dados da coleção para um único fragmento. Quando você desfragmenta uma coleção, a coleção não pode ser particionada em vários fragmentos, e a chave de fragmento é removida.
Novidades na versão 8.0.
Dica
In
mongosh, this command can also be run through thesh.unshardCollection().Helper methods are convenient for
mongoshusers, but they may not return the same level of information as database commands. In cases where the convenience is not needed or the additional return fields are required, use the database command.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: The fully managed service for MongoDB deployments in the cloud
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.writeConcernMajorityJournalDefaultdeve sertrue.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.If the collection you're unsharding uses MongoDB Search, the search index becomes unavailable when the unsharding operation completes. You need to manually rebuild the search index once the unsharding operation completes.
If the collection you're unsharding is archived in Atlas Online Archives, the online archive files are marked as
Orphanedonce the unsharding operation completes. You can create another online archive for the same database, collection, and fields as the orphaned archive as long as there is no other archive for that same combination in theActivestate.
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" } )