Encontrar índices no usados y ocultarlos antes de eliminarlos (hideIndex)
MongoDBRendimientoComando
// 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")Qué hace
$indexStats muestra cuántas veces se ha usado cada índice; hideIndex oculta un índice al query planner sin eliminarlo, de modo que el efecto de quitarlo puede probarse de forma reversible.
Cuándo usarlo
Al depurar índices innecesarios que añaden sobrecarga de escritura y almacenamiento.
Precaución
Los contadores son por miembro y se reinician al reiniciar; si las lecturas van a los secundarios, revise todos los miembros y observe un periodo suficientemente largo (incluidos los informes de fin de mes). Los índices únicos o TTL con ops 0 pueden seguir siendo necesarios: la restricción de unicidad y los borrados TTL no aparecen en el contador. Un índice oculto se sigue manteniendo en las escrituras, y un índice único oculto sigue imponiendo la restricción.
Relacionado
- Inspeccionar un plan de consulta con estadísticas de ejecución reales (explain executionStats)
- Extraer las consultas y query shapes más lentas de los datos del profiler
- Contar conexiones por aplicación y cliente (diagnóstico de connection storm)
- Medir la presión sobre la caché de WiredTiger (llenado, proporción sucia, eviction por la aplicación)