Запрос PrestoDB Mongo занимает слишком много времени - PullRequest
0 голосов
/ 25 апреля 2018

Я выполняю запрос в 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 миллионов записей с этим запросом?

Или это что-то с моей текущей конфигурацией?

1 Ответ

0 голосов
/ 25 апреля 2018

Пожалуйста, запустите EXPLAIN ANALYZE для вашего запроса в Presto и покажите нам результат. Должно быть понятно, какая часть запроса занимает большую часть времени.

...