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

Включает ли сжатие MongoDB 3.2 WiredTiger данные, хранящиеся в ОЗУ?

Насколько я понимаю, WiredTiger сжимает журнал, коллекции и индексы. Сжимает ли он их, пока они хранятся в ОЗУ?

Например, если мой индекс сжатия использует 10 МБ на диске, могу ли я предположить, что они также используют 10 МБ ОЗУ? Или мне следует ожидать большего несжатого индекса в ОЗУ?

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

Ответ на вопрос о том, что сжимается в памяти, имеет несколько нюансов, но общее резюме таково:

  • данные коллекции сжимаются в кеше файловой системы
  • данные коллекции несжаты во внутреннем кэше WiredTiger
  • индексы сжимаются на диске и в памяти

Компрессионные подходы

По умолчанию WiredTiger использует сжатие блоков Snappy для сбора данных, но есть и другие варианты, включая сжатие zlib или отсутствие сжатия. Блочное сжатие может обеспечить значительную экономию памяти, но данные должны быть несжатыми, чтобы сервер мог ими управлять. Независимо от параметров сжатия, данные по-прежнему записываются на диск в блочном формате, который отличается от представления в памяти в кэше WiredTiger.

Индексы сжимаются с использованием сжатия индексных префиксов, которое эффективно дедуплицирует общие префиксы из индексированных полей. Это может быть особенно эффективно для составных индексов, поскольку значения ведущих полей будут повторяться с уникальными значениями для дополнительных полей в индексе. Сжатие префиксов также позволяет запросам работать непосредственно со сжатыми индексами.

Что сжато в ОЗУ?

Как и в MongoDB 3.4 (включая предыдущие версии MongoDB с WiredTiger), есть два важных кэша для данных в ОЗУ:

  • Внутренний кеш WiredTiger, которым управляет cacheSizeGB настройка конфигурации.

    Размер кеша по умолчанию в MongoDB 3.4 больше: 50% ОЗУ минус 1 ГБ или 256 МБ. Данные коллекции во внутреннем кэше не сжимаются, однако данные индекса по-прежнему используют сжатие префиксов. Данные во внутреннем кэше WiredTiger фактически являются текущий рабочий набор.

  • Кэш файловой системы O / S, который обычно представляет собой оставшуюся часть свободной оперативной памяти, которая не используется кешем WiredTiger или другими процессами.

    Кэш файловой системы идентичен представлению на диске.

Настройка кеша

Обратите внимание, что кеш WiredTiger не отражает общее использование памяти MongoDB: mongod по-прежнему потребуется выделить память вне кеша для других целей, таких как соединения и обработка данных (например, агрегирование, отображение / сокращение, сортировка в памяти).

Внутренний кэш WiredTiger обычно следует оставить с размером по умолчанию или потенциально уменьшить. Если ваши данные хорошо сжимаются, а несжатые данные намного больше ОЗУ, вы сможете уместить больше данных в ОЗУ, уменьшив размер кеша WiredTiger, чтобы освободить память для кеша файловой системы. В руководстве MongoDB есть FAQ с дополнительной информацией: Какой размер я должен установить для внутреннего кеша WiredTiger?.

Для получения дополнительной информации я бы рекомендовал просмотреть Новые параметры сжатия в MongoDB 3.0 сообщение в блоге и Техническое введение в WiredTiger презентация.