2013-11-21 104 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