Trouver les index inutilisés et les masquer avant de les supprimer (hideIndex)
MongoDBPerformancesCommande
// 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.
Voir aussi
- Inspecter un plan de requête avec les statistiques d'exécution réelles (explain executionStats)
- Extraire les requêtes et formes de requêtes les plus lentes depuis les données du profiler
- Compter les connexions par application et client (diagnostic de tempête de connexions)
- Mesurer la pression sur le cache WiredTiger (remplissage, taux de pages sales, éviction par l'application)