Поиск неиспользуемых индексов и их скрытие перед удалением (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 не отражаются в счётчике. Скрытый индекс по-прежнему поддерживается при записи, а скрытый уникальный индекс по-прежнему обеспечивает ограничение.
Связанные материалы
- Анализ плана запроса с реальной статистикой выполнения (explain executionStats)
- Извлечение самых медленных запросов и форм запросов из данных профилировщика
- Подсчёт соединений по приложениям и клиентам (диагностика шторма подключений)
- Измерение давления на кэш WiredTiger (заполнение, доля грязных данных, вытеснение потоками приложения)