Я выполняю запрос в PrestoDB через соединитель MongoDB.Запрос извлекает данные из одной коллекции в MongoDB.Запрос выглядит примерно так:
SELECT studentId, classId, sum(date_diff('DAY', entryTime, (CASE WHEN (exitTime <= TIMESTAMP '2018-04-15 23:59:59 UTC') THEN exitTime ELSE TIMESTAMP '2018-04-15 23:59:59 UTC' END))) as timeSpent
FROM mongodb.school.student WHERE entryTime BETWEEN TIMESTAMP '2017-10-30 00:00:00 UTC' AND TIMESTAMP '2018-05-15 23:59:59 UTC' AND contains(classId, '1234') AND subject = 'Maths'
GROUP BY classId, studentId
ORDER BY timeSpent DESC;
У меня около 8 миллионов записей в коллекции, и этот запрос занимает около 45 секунд.
Мой PrestoDB настроен на один экземпляр Ubuntuдействуя как координатор и работник с общей оперативной памятью 8 ГБФайл jvm.config
выглядит следующим образом:
-server
-Xmx8G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+AggressiveOpts
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
Файл config.properties
имеет следующую конфигурацию:
coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB
discovery-server.enabled=true
discovery.uri=http://localhost:8080
-Xmx8G
был ранее -Xmx4G
, но я изменил его на-Xmx8G
попробовать, но производительность была почти такой же.Могу ли я:
- Использовать экземпляр со слишком низким объемом ОЗУ (8 ГБ)?
- Стоит ли запускать PrestoDB в качестве кластера?Какая конфигурация ожидается, если в этой коллекции будет около 60 миллионов записей с этим запросом?
Или это что-то с моей текущей конфигурацией?