Загружает ли MongoDB весь индекс в память? - PullRequest
1 голос
/ 11 июля 2020

Загружает ли MongoDB все индексы из нескольких баз данных и коллекций в память после запуска или всякий раз, когда он будет загружать индексы только при обнаружении запроса? Я пытаюсь понять, поддерживает ли MongoDB активную или ленивую загрузку индексов.

1 Ответ

3 голосов
/ 11 июля 2020

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

Чтобы продемонстрировать это:

  1. создайте коллекцию из нескольких тысяч документы, содержащие случайное целое число, например {i: <int>}
  2. , создают индекс для {i:1}
  3. , проверяют размеры индексов в коллекции, выполнив:
db.testcollection.stats().indexSizes
остановить mongod перезапустить mongod проверить количество данных в кеше с помощью
db.serverStatus().wiredTiger.cache["bytes currently in the cache"]

На этом этапе вы сможете обратите внимание, что общий объем данных в кеше меньше размера индексов в тестовой коллекции

запустить команду count с запросом, который будет охвачен первой частью индекса, например
db.testcollection.count({i:{$lt:50}})
повторно запустите команду serverStatus и обратите внимание на разницу в размере повторите шаги 7 и 8, обратите внимание, что размер не меняется, так как индекс уже загружен в память.

Если вы объясните команду count, она должна показывать ее с помощью этапа COUNT_SCAN, что означает, что она полностью обслуживается индексом и не требует загрузки каких-либо документов.

...