Menu Docs
Página inicial do Docs
/ /

sh.unshardCollection (método mongosh)

sh.unshardCollection( namespace, shardID )

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.

Importante

Método mongosh

Esta página documenta um método mongosh. Esta não é a documentação de comandos de banco de dados nem drivers específicos de linguagem, como Node.js.

Para o comando do banco de dados, consulte o comando unshardCollection.

Para drivers de API do MongoDB, consulte a documentação do driver do MongoDB específica da linguagem.

O método sh.unshardCollection exige que você especifique o shard para receber os dados da collection. Com o comando unshardCollection , se você não especificar o shard de destino, o cluster selecionará automaticamente o shard com menos dados.

Se a coleção usar fragmentação de zona , você deverá primeiro remover as associações de intervalo e o fragmento da zona antes de desfragmentar a coleção. 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.

sh.unshardCollection tem a seguinte sintaxe:

sh.unshardCollection( namespace, shardID )
Parâmetro
Tipo
Descrição

namespace

string

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

shardID

string

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.

Esse método 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

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.

Este exemplo desfragmenta uma collection denominada inventory no banco de banco de dados app para o shard shard02 .

sh.unshardCollection( "app.inventory", "shard02" )

Para obter uma lista dos IDs de shard disponíveis, execute sh.status(). Para obter detalhes, consulte sh.status() Saída.

Este exemplo desfragmenta uma collection que usa zonas:

1

Para parar o balanceador, execute o sh.stopBalancer() método:

sh.stopBalancer()
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, use o sh.removeRangeFromZone() método:

sh.removeRangeFromZone( {
"app.inventory",
{ size: 100 },
{ size: 500 }
} )

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

4

Para remover um fragmento de uma zona, execute o sh.removeShardFromZone() método:

sh.removeShardFromZone( "shard01", "mid" )

Repita até ter removido o fragmento de todas as zonas.

5

Para reiniciar o balanceador, execute o sh.startBalancer() método:

sh.startBalancer()
6

Para desfragmentar a coleção, execute o método sh.unshardCollection:

sh.unshardCollection( "app.inventory", "shard01" )

Voltar

sh.stopBalancer

Nesta página