MongoDB - Как повысить производительность создания индекса? - PullRequest
0 голосов
/ 11 марта 2020

Я провел несколько тестов для создания индекса на MongoDB. Моя цель - понять, как сократить время сборки индекса. Я думал об изменении значения "maxIndexBuildMemoryUsageMegabytes" , чтобы позволить mongod использовать больше ОЗУ для построения индекса.
https://docs.mongodb.com/manual/reference/parameters/#param .maxIndexBuildMemoryUsageMegabytes

Я сделал следующее тесты и некоторые интересные результаты:
Тест # 1
Память виртуальной машины: 2 ГБ
Размер документа: 100 миллионов документов (7,7 ГБ данных)
maxIndexBuildMemoryUsageMegabytes: 500 МБ
Взял 2269 se c для построения индекса.

Test # 2
Изменил maxIndexBuildMemoryUsageMegabytes на 800 МБ
Взял 1865 se c для построения индекса.
Это то, что я ожидал.

Тест # 3
Увеличение размера документа до 150 миллионов (размер дБ 11,642 ГБ)
maxIndexBuildMemoryUsageMegabytes: 500 МБ
Потребовалось 6085 (1,69 часов) для построения индекса

Тест № 4
То же, что и тест № 3, но с измененным значением maxIndexBuildMemoryUsageMegabytes на 800 МБ
Для построения индекса потребовалось 26315 (7,3 часа) .
Это НЕ , что я ожидал. После построения индекса используемый своп составляет 477 МБ.

Затем я попытался на другой виртуальной машине увеличить объем памяти и увеличить размер документа.

Тест # 5
Память виртуальной машины: 4 ГБ
Размер документа : 200 миллионов документов (размер данных 15 ГБ)
maxIndexBuildMemoryUsageMegabytes: 500 МБ
Взял 15032 se c для построения индекса.

Тест # 6
То же, что и в тесте № 5, но значение maxIndexBuildMemoryUsageMegabytes изменено на 1 ГБ.
Взял 15053 se c для построения индекса.
Это не сократило время индекса сборки.

Затем я увеличиваю размер документа до 400 миллионов документов (размер данных 37 ГБ).
Я пробовал и 500 МБ, и 1 ГБ на значении maxIndexBuildMemoryUsageMegabytes.
Время индекса сборки точно такое же.


Мой вопрос:
1. Что я должен установить для maxIndexBuildMemoryUsageMegabytes? Я знаю, что это зависит от размера памяти от размера данных и других факторов.
Каково хорошее соотношение, при котором я могу максимизировать использование памяти при построении индекса, но не использовать своп. (swappiness уже установлен в 1).

2. Есть еще идеи, как повысить производительность индекса сборки?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...