当Drill连接到Sharded Mongo环境(mongoS)时,与mongod上的查询执行时间相比,查询执行时间非常长(即使mongoS和mongoD上的数据量几乎相同)。这背后的根本原因可以与查询计划时间相关联。
关于MongoS 集合大小: - 200 GB,记录数:230,083,160
执行了带有索引列过滤器的简单选择查询,但查询执行时间超过50分钟。查询状态为“STARTING”直到40分钟。经过进一步分析,发现查询计划花了很长时间。 以下是此问题已本地化的详细信息 - 类名:DefaultSqlHandler.java 方法名称:受保护的RelNode转换(PlannerType plannerType,PlannerPhase阶段,RelNode输入,RelTraitSet targetTraits, 布尔日志) 行号:384:output = program.run(planner,input,toTraits);
以上行的输出由VolcanoPlanner类返回 (包:org.apache.calcite.plan.volcano),这需要花费大量时间进行查询计划。这仅适用于MongoS环境。
在MongoD环境中执行相同的选择查询时 CollectionSize:306 GB记录数:49,924,351 查询执行在2分钟内完成,上面的行在几秒钟内返回输出。
鉴于mongoD上的数据量与MongoS(200GB)相比较高(300 GB),但MongoD的查询计划要快得多。 MongoS环境的查询规划似乎存在一些问题。