Ungenutzte Indizes finden und vor dem Löschen verstecken (hideIndex)
MongoDBPerformanceBefehl
// 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")Was es tut
$indexStats zeigt, wie oft jeder Index genutzt wurde; hideIndex verbirgt einen Index vor dem Query Planner, ohne ihn zu löschen, sodass sich die Wirkung des Entfernens umkehrbar testen lässt.
Wann einsetzen
Beim Aufräumen unnötiger Indizes, die Schreib-Overhead und Speicherbedarf verursachen.
Vorsicht
Die Zähler gelten pro Mitglied und werden beim Neustart zurückgesetzt; gehen Lesezugriffe an Secondaries, alle Mitglieder prüfen und einen ausreichend langen Zeitraum beobachten (inklusive Monatsabschlussberichten). Unique- oder TTL-Indizes mit ops 0 können trotzdem nötig sein: Unique Constraint und TTL-Löschungen tauchen im Zähler nicht auf. Ein versteckter Index wird bei Schreibzugriffen weiter gepflegt, und ein versteckter Unique Index erzwingt den Constraint weiterhin.
Verwandte Einträge
- Abfrageplan mit echten Ausführungsstatistiken untersuchen (explain executionStats)
- Die langsamsten Abfragen und Query Shapes aus Profiler-Daten ermitteln
- Verbindungen nach Anwendung und Client zählen (Diagnose eines Connection Storms)
- Druck auf den WiredTiger-Cache messen (Füllgrad, Dirty-Anteil, Eviction durch Anwendungs-Threads)