Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

sh.unshardCollection (método mongosh)

sh.unshardCollection( namespace, shardID )

Desfaz 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.

Importante

Método mongosh

This page documents a mongosh method. This is not the documentation for database commands or language-specific drivers, such as 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
  • sh.unshardCollection() só pode ser executado em clusters fragmentados.

  • sh.unshardCollection() só pode operar em collections fragmentadas.

  • sh.unshardCollection() só pode operar em uma única collection por vez.

  • sh.unshardCollection() tem uma duração mínima de 5 minutos.

  • Você deve reconstruir os índices do Atlas Search após a execução do sh.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 sh.unshardCollection() seja concluído.

  • Não é possível executar as seguintes operações na collection que está sendo desfragmentada enquanto sh.unshardCollection() estiver em andamento:

  • Você não pode executar as seguintes operações no cluster enquanto o unshardCollection estiver em andamento:

  • As compilações de índice que ocorrem enquanto sh.unshardCollection() está em andamento podem falhar silenciosamente.

    • Não crie índices enquanto sh.unshardCollection() estiver em andamento.

    • Não chame sh.unshardCollection() se 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 Atlas 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 Orphaned once 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 the Active state.

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