Definição
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
Esta página documenta um método
mongosh. Esta não é a documentação para 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.unshardCollectionexige que você especifique o shard para receber os dados da collection. Com o comandounshardCollection, 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.
Sintaxe
sh.unshardCollection tem a seguinte sintaxe:
sh.unshardCollection( namespace, shardID )
Parâmetros
Parâmetro | Tipo | Descrição |
|---|---|---|
| string | Especifica o banco de dados de dados e a collection a serem desfragmentadas. |
| 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. |
Compatibilidade
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
Considerações
sh.unshardCollection()só pode ser executado em clusters fragmentados.sh.unshardCollection()só pode operar em collections fragmentadas.Somente uma operação
sh.unshardCollection()pode ser executada por vez. Não é possível executar operaçõessh.unshardCollection()simultâneas.Somente uma das seguintes operações pode ser executada por vez no cluster:
moveCollection,reshardCollection,rewriteCollectioneunshardCollection.sh.unshardCollection()tem uma duração mínima de 5 minutos.É necessário reconstruir os índices do MongoDB Search após a execução de
sh.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
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
unshardCollectionestiver 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.Se a coleção que você está desfragmentando usar MongoDB Search, o índice de pesquisa ficará indisponível quando a operação de desfragmentação for concluída. Você precisa reconstruir manualmente o índice de pesquisa assim que a operação de desfragmentação for concluída.
Se a coleção que você está desfragmentando for arquivada em Atlas Online Archives, os arquivos de arquivo online serão marcados como
Orphanedassim que a operação de desfragmentação for concluída. Você pode criar outro Online Archive para o mesmo banco de dados, coleção e campos que o arquivo órfão, desde que não haja outro arquivo para a mesma combinação no estadoActive.
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
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.