Página inicial do Docs → Desenvolver aplicações → Manual do MongoDB
Construção contínua de índices em conjuntos réplicas
Nesta página
As compilações de índice podem impacto o desempenho do conjunto de réplicas. Por padrão, o MongoDB cria índices simultaneamente em todos os membros do conjunto de réplicas portadoras de dados. Para cargas de trabalho que não toleram a diminuição do desempenho devido à criação de índices, considere usar o procedimento a seguir para criar índices de forma contínua.
As construções de índices contínuas retiram no máximo um membro do conjunto de réplicas de cada vez, começando pelos membros secundários, e constroem o índice nesse membro como standalone. As construções de índices contínuas exigem pelo menos uma eleição de conjunto de réplicas.
Considerações
Índices únicos
Para criar índices únicos usando o procedimento a seguir, você deve parar todas as gravações na collection durante o procedimento.
Se não for possível parar todos os escritos na coleção durante este procedimento, não use o procedimento nesta página. Em vez disso, crie seu índice único na coleção emitindo db.collection.createIndex()
no principal para um conjunto de réplicas.
Tamanho do log
Certifique-se de que seu oplog seja grande o suficiente para permitir que a operação de indexação ou reindexação seja concluída sem ficar muito para trás para recuperar o atraso. Consulte a documentação de dimensionamento do oplog para obter informações adicionais.
Pré-requisitos
- Para construir índices únicos
Para criar índices únicos usando o procedimento a seguir, você deve interromper todas as gravações na coleção durante a criação do índice. Caso contrário, você pode acabar com dados inconsistentes nos membros do conjunto de réplica.
Aviso
Se não for possível parar todos os escritos na coleção, não use o procedimento a seguir para criar índices únicos.
Procedimento
Importante
O procedimento a seguir para criar índices de forma contínua se aplica a sistemas de conjunto de réplicas, e não a clusters fragmentados. Para o procedimento para clusters fragmentados, consulte Rolling Index Builds on Sharded Clusters.
A. Pare um secundário e reinicie como autônomo
Interrompa o processo mongod
associado a uma secundária. Reinicie depois de fazer as seguintes atualizações de configuração:
[1] | (1, 2) Ao executar o mongod em uma porta diferente, você garante que os outros membros do conjunto de réplicas e todos os clientes não entrem em contato com o membro enquanto você estiver construindo o índice. |
B. Construir o Índice
Conecte-se diretamente à instânciamongod
em execução como standalone na nova porta e crie o novo índice para essa instância.
Por exemplo, conecte mongosh
à instância e use createIndex()
para criar um índice ascendente no campo username
da collection records
:
db.records.createIndex( { username: 1 } )
C. Reinicie o programa mongod
como um membro do conjunto de réplicas
Quando a construção de índice finalizar, desligue a instância do mongod
. Desfaça as alterações de configuração feitas ao iniciar como standalone para retornar a configuração original e reiniciar como membro do conjunto de réplicas.
Importante
Certifique-se de remover o parâmetro disableLogicalSessionCacheRefresh
.
Por exemplo, para reiniciar seu membro do conjunto de réplicas:
Permitir que a replicação alcance este membro.
D. Repetir o procedimento para os secundários restantes
Quando o membro alcançar os outros membros do conjunto, repita o procedimento um membro por vez para os membros secundários restantes:
E. Construir o índice no primário
Quando todos os secundários tiverem o novo índice, retire o primário, reinicie-o como standalone usando o procedimento descrito acima e crie o índice no primário anterior:
Use o método
rs.stepDown()
emmongosh
para diminuir o primário. Após a redução bem-sucedida, a primária atual se torna secundária e os membros do conjunto de réplicas elegem uma nova primária.C. Reinicie o programa
mongod
como um membro do conjunto de réplicas