Menu Docs
Página inicial do Docs
/ /

unshardCollection (comando de banco de dados)

unshardCollection

Desfragmenta 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 de sh.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.

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 .

Não é possível usar unshardCollection para collections de Queryable Encryption.

db.adminCommand( {
unshardCollection: "<database>.<collection>",
toShard: "<shard-id>"
} )
Campo
Tipo
necessidade
Descrição

unshardCollection

string

Obrigatório

Especifica o banco de dados de dados e a collection a serem desfragmentadas.

toShard

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.

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 ) * 2 bytes 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%.

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.

Para obter um exemplo, consulte Desfragmentar uma collection fragmentada de zona.

O exemplo a seguir desfragmenta a collection sales.eu_accounts :

db.adminCommand( {
unshardCollection: "sales.eu_accounts"
} )

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"
} )

O exemplo a seguir desfragmenta uma collection que usa zonas:

1

Para parar o balanceador, execute o balancerStop comando:

db.adminCommand( { balancerStop: 1 } )
2

Para identificar as faixas associadas às zonas, execute o sh.status() método e anote as faixas no chunks campo para cada collection fragmentada:

sh.status()
3

Para remover uma faixa de uma zona, execute o updateZoneKeyRange comando:

db.adminCommand( {
updateZoneKeyRange: "app.inventory",
min: 100,
max: 500,
zone: null
} )

Repita esta etapa até ter removido todos os intervalos das zonas usadas pela coleção.

4

Para remover shards da zona, execute o removeShardFromZone comando

db.adminCommand( {
removeShardFromZone: "shard01",
zone: "us"
} )

Repita até ter removido todos os shards de collection das zonas.

5

Para reiniciar o balanceador, execute o balancerStart comando:

db.adminCommand( { balancerStart: 1 } )
6

Para desfragmentar a collection, execute o comando unshardCollection:

db.adminCommand( { unshardCollection: "app.inventory" } )

Voltar

unsetSharding

Nesta página