Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

Desfragmentar uma collection

Nesta página

  • Sobre esta tarefa
  • Controle de acesso
  • Antes de começar
  • Passos
  • Saiba mais

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 no Atlas Shared Tier ou no Atlas Serverless.

  • 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

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