Я провел несколько тестов для создания индекса на 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. Есть еще идеи, как повысить производительность индекса сборки?
Спасибо!