2013-11-21 65 views
5

我注意到,我第一次在RedShift上运行查询时,需要3-10秒。当我再次运行相同的查询时,即使在WHERE条件中使用不同的参数,它运行速度也很快(0.2秒)。 查询我正在谈论的是在〜3行整数列上的3个整数列上运行。在RedShift中第一次执行查询时的运行时间很长

由于RedShift第一次编译查询,然后重新使用编译后的代码,导致执行时间的巨大差异?

如果是 - 如何始终保持编译查询的缓存温暖?

还有一个问题: 给定queryA和queryB。我们假设queryA首先被编译和执行。 queryB与queryA的相似程度如何,以便执行queryB将使用为queryA编译的代码?

回答

4

第一个问题的答案是肯定的。 Amazon Redshift为查询编译代码并对其进行缓存。已编译的代码在集群中的会话中共享,因此,不同会话中具有不同参数的相同查询将因没有开销而运行得更快。

此外,他们还建议使用查询的第二次执行结果作为基准。

这个问题和答案在下面的链接。 http://docs.aws.amazon.com/redshift/latest/dg/c-compiled-code.html

+0

这是绝对正确的。我更深入地挖掘搞清楚究竟是什么原因导致的代码重新编译:https://medium.com/@pingram/redshift-code-compilation-977143576e89 – Phil

+0

你怎么能告诉我们,如果第二次,结果不来了从缓存结果?你真的可以指望第二次尝试同一查询进行性能测试的执行时间吗?另一个链接http://docs.aws.amazon.com/redshift/latest/dg/c-query-performance.html – Faiz

+0

可以测试查询的影响孤立编译通过一个空表尝试不同的查询,消除数据缓存作为一个变量。我发现,查询编译延迟尺度与查询的复杂性:特别是,许多表和联接参与。请参阅:http://wrschneider.github.io/2017/06/02/redshift-compile-latency.html – wrschneider