DBAtlas · Атлас эксплуатации баз данных

Поиск неиспользуемых индексов и их скрытие перед удалением (hideIndex)

MongoDBПроизводительность

Команда

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

Что делает

$indexStats показывает, сколько раз использовался каждый индекс; hideIndex скрывает индекс от планировщика запросов без удаления, поэтому эффект удаления можно проверить обратимо.

Когда использовать

При чистке ненужных индексов, добавляющих накладные расходы на запись и место.

Внимание

Счётчики свои на каждом участнике и сбрасываются при перезапуске; если чтение идёт на secondary, проверьте всех участников и наблюдайте достаточно долго (включая отчёты конца месяца). Уникальные или TTL-индексы с ops 0 всё ещё могут быть нужны: уникальное ограничение и удаления TTL не отражаются в счётчике. Скрытый индекс по-прежнему поддерживается при записи, а скрытый уникальный индекс по-прежнему обеспечивает ограничение.

Открыть в DBAtlas →

Связанные материалы