Thank you for reading this post, don't forget to subscribe!
в MongoDB не так много настроек, есть только несколько параметров, которые вы можете изменить на сервере. Реальная настройка выполняется в запросах и индексах, которые должны присутствовать. И для этой цели хорошо подойдет dex утилита.
Dex — это консольная утилита, которая может анализировать логи MongoDB, сравнивать запросы, которые регистрируются в запущенном экземпляре MongoDB и сообщать вам, какие индексы следует добавить, чтобы оптимизировать вашу производительность.
нам потребуется dex и нужно его установить.
Инструмент dex устанавливается через pip — менеджер пакетов Python. Вот пример того, как можно установить pip на CentOS/Fedora/RedHat:
yum install python-pip -y
Установка pip/setuptools/wheel в CentOS/RHEL
Чтобы установить pip и wheel, существует два варианта:
1. Включите репозиторий EPEL
После чего, вы можете установить pip следующим образом:
yum install python-pip
2. Включите репозиторий PyPA Copr репозиторий:
CentOS 6:
Чтобы установить dex, используем:
pip install dex
[codesyntax lang="php" blockstate="collapsed"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$ 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 } } ] } |
[/codesyntax]
[codesyntax lang="php" blockstate="collapsed"]
1 2 3 4 5 6 7 8 9 |
$ dex -f /var/log/mongodb/mongod.log mongodb://localhost { 'runStats': { 'linesRecommended': 0, 'linesProcessed': 0, 'linesPassed': 39 }, 'results': [] } |
[/codesyntax]
Он проверил все строки в файле mongod.log и не смог посоветовать никакое улучшение. Хорошая новость — MongoDB, кажется, работает просто отлично!
Возможно, вы не хотите проверять каждый запрос в лог-файле. Можно добавить параметр «—slowms», чтобы проверять только запросы, которые превышают тайм-аут медленного журнала:
В качестве альтернативы вы можете использовать параметр «—watch», чтобы не парсить весь лог при запуске, а обрабатывать только новые записи. Такой вариант может быть полезным, когда ваш лог уже превышает пару ГБ, и вам нет необходимости использовать старые значения:
Инструмент dex предлагает вам очень простой способ применения индексов, которые он рекомендует: команда выводиться на выходе! Вот пример:
[codesyntax lang="php" blockstate="collapsed"]
1 2 3 4 5 6 7 |
... 'recommendation': { 'index': '{"columnId": 1}', 'namespace': 'collection.table', 'shellCommand': 'db["collection"].ensureIndex({"columnId": 1}, {"background": true})' }, ... |
[/codesyntax]
Чтобы применить команду, подключитесь к работающему экземпляру MongoDB, используя клиентский инструмент mongo, вторым аргументом является коллекция, которую вы хотите открыть:
mongo collection
> db["collection"].ensureIndex({"columnId": 1}, {"background": true})
В результате индекс добавляется в фоновом режиме: это не блокирует строки, и приложение может продолжать работать. В MongoDB есть несколько исходных индексов, но для меня они перевешивают недостаток наличия блокировки чтения и записи данных.
Если вы работаете с MongoDB, обязательно используйте инструмент dex, чтобы помочь устранить проблемы с производительностью.