Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/
Manual do banco de dados
/ / /

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.

  • É necessário reconstruir os índices do MongoDB Search após a execução de 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 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.

Voltar

Collections não fragmentadas

Nesta página