DBAtlas · Atlas d'exploitation des bases de données

Trouver les index inutilisés et les masquer avant de les supprimer (hideIndex)

MongoDBPerformances

Commande

// 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")

Ce que fait la commande

$indexStats indique combien de fois chaque index a été utilisé ; hideIndex masque un index au query planner sans le supprimer, ce qui permet de tester de façon réversible l'effet de sa suppression.

Quand l'utiliser

Lors du nettoyage des index inutiles qui ajoutent une surcharge d'écriture et du stockage.

Attention

Les compteurs sont propres à chaque membre et réinitialisés au redémarrage ; si les lectures vont vers les secondaires, vérifiez tous les membres et observez une période suffisamment longue (rapports de fin de mois compris). Les index uniques ou TTL avec ops 0 peuvent rester nécessaires : la contrainte d'unicité et les suppressions TTL n'apparaissent pas dans le compteur. Un index masqué reste maintenu lors des écritures, et un index unique masqué impose toujours la contrainte.

Ouvrir dans DBAtlas →

Voir aussi