Оптимизация настроек MongoDB в Unix/Linux

Оптимизация настроек 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» завершена.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.