Как настроить системные параметры для mongoDB в Linux?

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

Хотя справочные страницы MongoDB содержат несколько полезных рекомендаций по настройкам системы, таким как ulimit ( http://docs.mongodb.org/manual/reference/ulimit/) и другим факторам производства ( http://docs.mongodb.org/manual/). администрация / производственные заметки /) они кажутся загадочно молчаливыми о таких вещах, как виртуальная память и параметры подкачки.

Наиболее близкий нам намек на то, что "... подсистема виртуальной памяти операционной системы управляет памятью MongoDB..." ( http://docs.mongodb.org/manual/faq/fundamentals/).

Выполнение одной и той же задачи - высокая запись и высокое чтение для примерно 10000000 записей в одной коллекции - на моем 4-процессорном MacBook с 4 ГБ ОЗУ и 8-ядерным Ubuntu с 64 ГБ ОЗУ. заводские настройки, и слышно, как диск постоянно вращается, что указывает на высокий уровень ввода-вывода и, предположительно, подкачку. Да, на коробке происходили другие вещи, но было много свободной оперативной памяти, дискового пространства и т. Д.; кроме того, я не видел доказательств того, что Mongo расширяется, чтобы использовать все эти свободные ОЗУ, как это принято делать.

Настройки Linux по умолчанию были следующими: vm.swappiness =60 vm.dirty_background_ratio = 10 vm.dirty_ratio = 20 vm.dirty_expire_centisecs =3000 vm.dirty_writeback_centisecs=500

Я рисковал некоторыми догадками, просматривая документы и блоги для других типов баз данных (Oracle, MYSQL и т. Д.), Экспериментировал и настраивал, как показано ниже. vm.swappiness=10 vm.dirty_background_ratio=5 vm.dirty_ratio=5 vm.dirty_writeback_centisecs=250 vm.dirty_expire_centisecs=500

Я видел некоторые очевидные улучшения во время чтения. Однако, когда я снова запустил свои тестовые задания, производительность чтения продолжала мучительно снижаться во время тяжелых записей.

Затем я ПОЛУЧИЛ коллекцию из доступного источника данных - и вдруг я могу читать со скоростью 1 мс или меньше на одну запись, пока выполняю работу записи!

Так что вопрос действительно двойственный:

1) Каковы соответствующие настройки виртуальной машины для MongoDB в Linux?2) (бонус) Проводит ли Mongo некоторую проверку или оптимизацию с ОС во время сборки данных? Другими словами, если я построил большой набор данных с неоптимальными настройками виртуальной машины или ввода / вывода, то будут ли Монго делать предположения в процессе отображения памяти, которые не смогут использовать преимущества оптимизации в будущем?

Очевидно, что я не полностью понимаю отображение памяти под капотом (я надеялся, что мне не придется).

Любая помощь приветствуется... спасибо! -j

1 ответ

Я думаю, что ваш случай с 4 гигабайтами оперативной памяти довольно хорошо описан здесь для Neo4j, который также использует Memory Mapped IO, и поэтому должны применяться те же меры настройки:

http://docs.neo4j.org/chunked/stable/linux-performance-guide.html

Итак, прочитав это, я думаю, что ваш

vm.dirty_ratio=5
vm.dirty_background_ratio=5 

скорее слишком низко, чем высоко.

Другие вопросы по тегам