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

Desfragmentar uma collection

Você pode desfragmentar uma collection fragmentada com o comando unshardCollection . Ao desfragmentar uma collection, a collection não pode ser particionada em vários shards e a chave de shard é removida.

Por padrão, quando você desfragmenta uma collection, o MongoDB move os dados da collection para o shard com a menor quantidade de dados. Como alternativa, você pode especificar em qual fragmento colocar os dados.

Você pode executar esta tarefa em implementações hospedadas nos seguintes ambientes:

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

  • 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

  • unshardCollection só pode ser executado em clusters fragmentados.

  • unshardCollection só pode operar em collections fragmentadas.

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

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

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

  • Não é possível executar as seguintes operações na collection que está sendo desfragmentada enquanto 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 unshardCollection está em andamento podem falhar silenciosamente.

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

    • Não chame 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 collection que você está desfragmentando usar Atlas 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.

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

Se seu sistema tiver o controle de acesso ativado, a função enableSharding concederá a você acesso para executar o comando unshardCollection .

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

1

Se quiser colocar os dados da sua coleção de fragmentos em um fragmento específico, você precisa do nome do fragmento de destino.

Para visualizar a lista de nomes de fragmentos em seu agrupamento, utilize o comando listShards :

db.adminCommand( { listShards: 1 } )

O campo shards._id lista o nome de cada shard.

2

Para desfragmentar uma collection, execute o comando unshardCollection . O exemplo a seguir desfragmenta uma collection chamada us_accounts no banco de banco de dados sales :

db.adminCommand( {
unshardCollection: "sales.us_accounts",
toShard: "shard1"
} )

Após a conclusão da operação de desfragmentação, os dados da collection us_accounts estarão em shard1. Se você omitir o campo toShard , os dados serão colocados no shard com a menor quantidade de dados.

3

Para confirmar que a collection não está fragmentada, use o estágio $shardedDataDistribution e tente fazer a correspondência no namespace não fragmentado:

db.aggregate( [
{ $shardedDataDistribution: { } },
{ $match: { "ns": "sales.us_accounts" } }
] )

Se a agregação não retornar quaisquer dados, a collection não será fragmentada.