我通过MongoDB连接器在PrestoDB中运行查询。该查询从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;
我在集合中有大约800万条记录,这个查询大约需要45秒才能执行。
我的PrestoDB设置在一个Ubuntu实例上,作为协调器和工作人员,总RAM为8GB。 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
以尝试但性能几乎相同。我是:
或者它是我当前配置本身的东西吗?
答案 0 :(得分:0)
请在Presto中为您的查询运行EXPLAIN ANALYZE并向我们显示输出。 应该清楚查询的哪个部分占用大部分时间。