Назад | Перейти на главную страницу

Есть ли простой способ узнать, какие индексы mongodb используются?

Мы накопили большое количество индексов в одной из наших коллекций mongodb, и было бы неплохо удалить некоторые из них, если это возможно. Однако довольно сложно узнать, какие индексы активно используются приложением, а какие (если таковые имеются) уже устарели.

Кто-нибудь знает какие-либо инструменты / методы для анализа используемых индексов?

Изменить: Mongo v3.0.5

К сожалению, MongoDB 3.0 не имеет прямого метода определения неиспользуемых индексов.

MongoDB 3.2 улучшает это с введением $ indexStats, который показывает доступ к индексу: https://docs.mongodb.com/manual/reference/operator/aggregation/indexStats/

Несколько предложений:

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

  • Как упоминал Джейкоб, использование плана объяснения может помочь определить, использует ли запрос индекс. PlanCache.getPlansByQuery () расширяет это, показывая, какие планы запросов в настоящее время кэшируются в базе данных для определенных шаблонов запросов: https://docs.mongodb.com/v3.0/reference/method/PlanCache.getPlansByQuery/#PlanCache.getPlansByQuery

После публикации MongoDB 3.2 у вас есть $ indexStats, который позволяет узнать, какие индексы используются и в какой степени. Я собрал сообщение в блоге об этом - https://scalegrid.io/blog/how-to-find-unused-indexes-in-mongodb/

Вы можете использовать query.explain () для отдельных запросов, чтобы получить план запроса для этого запроса. Вы можете узнать об этом подробнее здесь. https://docs.mongodb.com/manual/reference/method/cursor.explain/

Другие вещи, которые вы можете захотеть изучить:

В выводе serverStatus:

scanned
scanAndOrder

В выводе collStats:

totalIndexSize
indexSizes

В выводе dbStats:

dbStats.indexes
dbStats.indexSize