【发布时间】:2018-10-05 11:24:34
【问题描述】:
我正在通过 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 尝试但性能几乎相同。我是:
- 使用的实例的 RAM (8GB) 太低?
- 我应该尝试将 PrestoDB 作为集群运行吗?如果使用此查询在该集合中大约有 6000 万条记录,那么预期的配置是什么?
还是与我当前的配置本身有关?
【问题讨论】:
-
您是否能够诊断出瓶颈?这个查询是cpu、内存、磁盘还是网络绑定的?我认为您需要先回答这个问题,然后您现在需要更多资源。您是否可以直接在 mongo 中执行相同(等效)查询,以查看您的查询在本机执行时的速度。
-
我在 MongoDB 中执行了查询,它只在 1.5 秒内返回了结果(可能是由于我在 MongoDB 中定义的索引没有被 PrestoDB 考虑)。如您所说,我如何知道查询的范围,您能否提供任何可以研究的资源?
-
您可以粘贴您创建的
mongodb.properties连接文件吗?还有你运行的是哪个版本的 Presto? -
@jpavs
mongodb.properties只包含 MongoDB 的连接器名称、用户名、密码、主机和端口。另外,我使用prestodb-0.198。