DBAtlas · Atlas für Datenbankbetrieb

Ungenutzte Indizes finden und vor dem Löschen verstecken (hideIndex)

MongoDBPerformance

Befehl

// 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.

In DBAtlas öffnen →

Verwandte Einträge