
Оптимизация настроек MongoDB в Unix/Linux
На самом деле в MongoDB не так много настроек, есть только несколько параметров, которые вы можете изменить на сервере. Реальная настройка выполняется в запросах и индексах, которые должны присутствовать. И для этой цели хорошо подойдет dex утилита.
Dex — это консольная утилита, которая может анализировать логи MongoDB, сравнивать запросы, которые регистрируются в запущенном экземпляре MongoDB и сообщать вам, какие индексы следует добавить, чтобы оптимизировать вашу производительность.
Установка MongoDB в Unix/Linux
Я в своей статье, рассказывал как можно установить монгу. Если есть необходимость, воспользуйтесь следующим материалом:
Установка MongoDB в Unix/Linux
Создать/Удалить базу данных в MongoDB
Создание/Восстановление бэкапа баз данных в MongoDB
Как я сказал ранее, в mongodb, не так уж и много что оптимизировать. Но давайте приступим….
Оптимизация настроек MongoDB в Unix/Linux
И так, нам потребуется dex и нужно его установить.
Инструмент dex устанавливается через pip — менеджер пакетов Python. Вот пример того, как можно установить pip на CentOS/Fedora/RedHat:
$ yum install python-pip -y
PS: Вот статья, как можно установить pip на другие Unix/Linux ОС:
Установка pip/setuptools/wheel в Unix/Linux
Чтобы установить dex, используем:
$ pip install dex
Запускаем:
$ dex -f /var/log/mongodb/mongod.log mongodb://localhost
Данное действие, запустит dex, который будет читать все логи в mongodb.log файле и проверять для каждого запроса, существуют ли необходимые индексы. Например:
$ dex -f mongod.log mongodb://localhost { 'runStats': { 'linesRecommended': 66, 'linesProcessed': 190, 'linesPassed': 522 }, 'results': [ { 'queryMask': '{"$query":{"columnId":""}}', 'namespace': 'collection.table', 'recommendation': { 'index': '{"columnId": 1}', 'namespace': 'collection.table', 'shellCommand': 'db["collection"].ensureIndex({"columnId": 1}, {"background": true})' }, 'details': { 'count': 55, 'totalTimeMillis': 213856, 'avgTimeMillis': 3888 } } ] }
Если нет необходимости что-то оптимизировать, вы получите нечто подобное:
$ dex -f /var/log/mongodb/mongod.log mongodb://localhost { 'runStats': { 'linesRecommended': 0, 'linesProcessed': 0, 'linesPassed': 39 }, 'results': [] }
Он проверил все строки в файле mongod.log и не смог посоветовать никакое улучшение. Хорошая новость — MongoDB, кажется, работает просто отлично!
Возможно, вы не хотите проверять каждый запрос в лог-файле. Можно добавить параметр «—slowms», чтобы проверять только запросы, которые превышают тайм-аут медленного журнала:
$ dex -f dex -f /var/log/mongodb/mongod.log mongodb://localhost --slowms 200
При таком варианте, будут проверяться только те запросы, длительность которых превышает 200 мс.
В качестве альтернативы вы можете использовать параметр «—watch», чтобы не парсить весь лог при запуске, а обрабатывать только новые записи. Такой вариант может быть полезным, когда ваш лог уже превышает пару ГБ, и вам нет необходимости использовать старые значения:
$ dex -f /var/log/mongodb/mongod.log mongodb://localhost --watch
Это значительно ускоряет запуск dex.
Инструмент dex предлагает вам очень простой способ применения индексов, которые он рекомендует: команда выводиться на выходе! Вот пример:
... 'recommendation': { 'index': '{"columnId": 1}', 'namespace': 'collection.table', 'shellCommand': 'db["collection"].ensureIndex({"columnId": 1}, {"background": true})' }, ...
Чтобы применить команду, подключитесь к работающему экземпляру MongoDB, используя клиентский инструмент mongo, вторым аргументом является коллекция, которую вы хотите открыть:
$ mongo collection > db["collection"].ensureIndex({"columnId": 1}, {"background": true})
В результате индекс добавляется в фоновом режиме: это не блокирует строки, и приложение может продолжать работать. В MongoDB есть несколько исходных индексов, но для меня они перевешивают недостаток наличия блокировки чтения и записи данных.
Если вы работаете с MongoDB, обязательно используйте инструмент dex, чтобы помочь устранить проблемы с производительностью.
На этому, у меня все. Тема «Оптимизация настроек MongoDB в Unix/Linux» завершена.