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

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

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

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

Ближе всего к намеку можно сказать, что «... подсистема виртуальной памяти операционной системы управляет памятью MongoDB ...» (http://docs.mongodb.org/manual/faq/fundamentals/#does-mongodb-require-a-lot-of-ram).

Выполняя одну и ту же работу - большое количество операций записи и высокое количество чтения около 10 000 000 записей в одной коллекции - на моем Macbook с 4 процессорами, 4 ГБ ОЗУ и 8-ядерном корпусе ubuntu с ОЗУ 64 ГБ, я увидел значительно ХУШЕ скорость чтения на компьютере с Linux. заводские настройки, и можно было слышать, как диск постоянно вращается, что указывает на высокий уровень ввода-вывода и, предположительно, подкачку. Да, с коробкой происходили и другие вещи, но там было много свободной оперативной памяти, места на диске и т. Д .; кроме того, я сделал не увидеть доказательства того, что 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 некоторую проверку или оптимизацию с ОС во время создания данных? Другими словами, если я создал большой набор данных с неоптимальными настройками виртуальной машины или ввода-вывода, делает ли Mongo предположения во время процесса отображения памяти, которые не смогут воспользоваться преимуществами оптимизации в будущем?

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

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

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

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

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

vm.dirty_ratio=5
vm.dirty_background_ratio=5 

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