2013-11-21 27 views
5

初めてRedShiftでクエリを実行すると、3〜10秒かかります。同じクエリをWHERE条件で異なる引数で実行しても、高速(0.2秒)で実行されます。 クエリ私は3つの整数列に〜1M行のテーブルで実行について話していました。RedShiftでクエリが初めて実行されたときのランタイム

RedShiftが実行を初めてコンパイルし、コンパイルされたコードを再利用するという事実によって、実行時間に大きな違いがありますか?

「はい」の場合 - このコンパイル済みクエリのキャッシュを暖かく保つにはどうすればよいですか?

もう1つ質問: 与えられたクエリAとクエリB。 queryAが最初にコンパイルされて実行されたとしましょう。 queryBの実行がqueryAのためにコンパイルされたコードを使用するように、queryBはどのようにqueryAになるべきですか?

答えて

4

最初の質問の回答ははいです。 Amazon Redshiftはクエリのコードをコンパイルし、キャッシュします。コンパイルされたコードはクラスタ内の複数のセッションで共有されるため、異なるセッションの異なるパラメータであっても同じオーバーヘッドがないため、より高速に実行されます。

また、ベンチマークのクエリの2回目の実行の結果を使用することをお勧めします。

この質問と詳細の回答は、次のリンクにあります。 http://docs.aws.amazon.com/redshift/latest/dg/c-compiled-code.html

+0

これは間違いありません。私はコードの再コンパイルを引き起こす原因を正確に突き止めることに深く掘り下げました:https://medium.com/@pingram/redshift-code-compilation-977143576e89 – Phil

+0

2回目の結果が来ないかどうかキャッシュされた結果から?あなたは本当にパフォーマンステストのための同じクエリの2番目の試行の実行時間をカウントできますか?別のリンク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

関連する問題