【问题标题】:PrestoDB Mongo query taking too much timePrestoDB Mongo 查询花费太多时间
【发布时间】: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

标签: mongodb presto


【解决方案1】:

请在 Presto 中为您的查询运行 EXPLAIN ANALYZE 并向我们展示输出。 应该清楚查询的哪一部分花费的时间最多。

【讨论】:

  • 这不是答案,请发表评论等问题。干杯:)
猜你喜欢
  • 1970-01-01
  • 2018-01-08
  • 2019-11-14
  • 2012-09-03
  • 2013-07-11
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多