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

Eliminar um índice de chave de fragmento com hash

Nesta página

  • Sobre esta tarefa
  • Passos
  • Saiba mais

A partir do MongoDB 7.0.3 (e 6.0.12 and 5.0.22), você pode descartar o índice de uma hashed shard key.

Isso pode acelerar a inserção de dados para collection fragmentadas com uma chave de fragmento com hash. Ele também pode acelerar a ingestão de dados ao usar mongosync.

Eliminar um índice desnecessário pode acelerar operações CRUD. Cada operação CRUD deve atualizar todos os índices relacionados a um documento. Remover um índice pode aumentar a velocidade de todas as operações CRUD.

Quando você descarta uma chave de fragmento com hash, o servidor desabilita o balanceamento para essa collection e exclui a collection de futuras rodadas de balanceamento. Para incluir a collection nas rodadas de balanceamento mais uma vez, você deve recriar o índice da chave de fragmento.

Importante

Você só deve descartar uma chave de fragmento com hash de uma collection se houver um índice não hasheado de suporte na chave de shard. Se um índice sem hash de suporte não existir na chave de fragmento, as queries filtradas pela chave de fragmento executarão uma verificação de collection . Para ver quais índices existem em uma coleção, use db.collection.getIndexes().

1

Execute o seguinte comando para parar o balanceador:

sh.stopBalancer()

Você só pode executar sh.stopBalancer() em mongos. sh.stopBalancer() produz um erro se for executado em mongod.

2

A partir do MongoDB 6.0.3, você pode executar uma agregação usando o estágio $shardedDataDistribution para confirmar que nenhum documento órfão permanece:

db.aggregate([
{ $shardedDataDistribution: {} },
{ $match: { "ns": "<database>.<collection>" } }
])

$shardedDataDistribution tem saída semelhante à seguinte:

[
{
"ns": "test.names",
"shards": [
{
"shardName": "shard-1",
"numOrphanedDocs": 0,
"numOwnedDocuments": 6,
"ownedSizeBytes": 366,
"orphanedSizeBytes": 0
},
{
"shardName": "shard-2",
"numOrphanedDocs": 0,
"numOwnedDocuments": 6,
"ownedSizeBytes": 366,
"orphanedSizeBytes": 0
}
]
}
]

Certifique-se de que "numOrphanedDocs" seja 0 para cada shard no cluster.

3

Execute o seguinte comando para eliminar o índice:

db.collection.dropIndex("<index name>")
4

Execute o seguinte comando para reiniciar o balanceador no cluster:

sh.startBalancer()

Voltar

Limpar bandeira jumbo