Menu Docs

Eliminar um índice de chave de fragmento com hash

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 collections fragmentadas com uma hashed shard key. 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 precisa atualizar todos os índices relacionados a um documento. Remover um índice pode aumentar a velocidade de todas as operações CRUD.

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 não hash de suporte não existir na chave de shard, as queries que são filtradas pela chave de shard executarão uma verificação de collection . Para ver quais índices existem em uma coleção,db.collection.getIndexes() use.

Ao descartar um índice de chave de fragmento com hash , considere o seguinte:

  • O servidor desativa o balanceamento para sua coleção e exclui a coleção de futuras rodadas de balanceamento. Para incluir a collection em futuras rodadas de balanceamento, recrie o índice da chave de shard.

  • Quando você descarta o índice da chave de shard, o excludente de intervalo não limpa nenhum órfão restante em sua coleção. Você deve confirmar que não existem documentos órfãos em sua collection antes de descartar o índice da chave de fragmento com hash . Consulte o procedimento abaixo para saber como confirmar que não há documentos órfãos em sua coleção.

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 um resultado semelhante ao 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()