慢的Redshift查询,成本低且行数少

时间:2018-08-27 14:50:41

标签: amazon-redshift

我有一个Redshift查询,它生成以下查询计划:

XN HashAggregate  (cost=4.00..4.06 rows=1 width=213)
  ->  XN Hash Join DS_DIST_ALL_NONE  (cost=0.02..3.97 rows=1 width=213)
        ->  XN Hash Join DS_DIST_NONE  (cost=0.00..3.93 rows=1 width=213)
        ->  XN Hash  (cost=0.01..0.01 rows=1 width=8)
              ->  XN Seq Scan on response_entities re  (cost=0.00..1.96 rows=157 width=85)
              ->  XN Hash  (cost=0.00..0.00 rows=1 width=208)
                    ->  XN Seq Scan on response_views rv  (cost=0.00..0.00 rows=1 width=208)
              ->  XN Seq Scan on dim_date dd  (cost=0.00..0.01 rows=1 width=8)

该查询不会广播或重新分发任何数据,它的成本非常低,并且不需要读取大量行。它实际上不返回任何行,并且其任何步骤都不基于磁盘。

AWS控制台上的执行详细信息显示如下:

enter image description here

我不包括查询,因为我没有寻找该特定查询需要3秒钟才能完成的原因。我一直看到执行时间表与此类似,我试图理解为什么即使每个步骤仅花费几毫秒即可完成,查询却要花费更长的时间。没有其他并发查询正在执行。

所有这些时间都花在查询编译上吗?这是预期的吗?有什么我想念的吗?

1 个答案:

答案 0 :(得分:1)

查询编译似乎是这样做的原因。此查询慢速编译的段。

select userid, xid,  pid, query, segment, locus,  
datediff(ms, starttime, endtime) as duration, compile 
from svl_compile 
where query = 26540
order by query, segment;

有关svl_compile的更多信息,请参见here

this article解释了相同的问题,以及如何减少编译次数(或解决方法)。