Encontrar índices não utilizados e ocultá-los antes de remover (hideIndex)
MongoDBDesempenhoComando
// Usage counter per index (on this member, since the last restart):
db.musteri.aggregate([{ $indexStats: {} }, { $project: { name: 1, ops: "$accesses.ops", since: "$accesses.since" } }, { $sort: { ops: 1 } }])
// Hide it from the planner before dropping (the index keeps being maintained):
db.musteri.hideIndex("idx_email")
// Revert immediately if problems appear:
db.musteri.unhideIndex("idx_email")
// If the observation period passes without issues:
db.musteri.dropIndex("idx_email")O que faz
$indexStats mostra quantas vezes cada índice foi usado; hideIndex oculta um índice do query planner sem removê-lo, de modo que o efeito de removê-lo pode ser testado de forma reversível.
Quando usar
Ao limpar índices desnecessários que adicionam overhead de escrita e armazenamento.
Atenção
Os contadores são por membro e zeram no restart; se as leituras vão para os secundários, verifique todos os membros e observe um período longo o suficiente (incluindo relatórios de fim de mês). Índices únicos ou TTL com ops 0 ainda podem ser necessários: a unique constraint e os deletes do TTL não aparecem no contador. Um índice oculto continua sendo mantido nas escritas, e um índice único oculto continua garantindo a constraint.
Relacionados
- Inspecionar um plano de consulta com estatísticas reais de execução (explain executionStats)
- Extrair as consultas e query shapes mais lentas dos dados do profiler
- Contar conexões por aplicação e cliente (diagnóstico de connection storm)
- Medir a pressão no cache do WiredTiger (ocupação, taxa de dirty, eviction pela aplicação)