[アップデート] Amazon Redshift クエリのパフォーマンスを最適化するための多次元データレイアウトのソートキーをサポート (プレビュー) #AWSreInvent
データアナリティクス事業本部のコンサルティングチームの石川です。
本日より、Amazon Redshift は、パブリックプレビューで反復的なクエリのパフォーマンスを最適化する新しいテーブルソートメカニズムである多次元データレイアウトのソートキーをサポートしました。
多次元データレイアウトのソートキーとは
テーブルの物理列ではなくフィルター述語によってテーブルのデータをソートする新しいタイプのソートキーです。多次元データレイアウトの並べ替えキーにより、特にクエリに反復スキャンフィルターが含まれる場合、テーブルスキャンのパフォーマンスが大幅に向上します。
Amazon Redshiftは、すでに自動テーブル最適化(ATO) によって、自動的にソートキーと分散キーを最適化する機能があります。さらにATOのAmazon Redshiftのソートキーアドバイザーアルゴリズムによって強化された追加機能が多次元データレイアウトのソートキーです。
パフォーマンス改善の例
述語に関数を含む場合
下記の例では、述語に関数を含む、つまりWHERE句に指定したカラムに関数を適用した結果を条件に指定した場合、クエリのフィルターは下記のtitlesテーブルの全ての行をスキャンします。
SELECT season, sum(metric2) AS "__measure__0" FROM titles WHERE lower(subregion) like '%United States%' GROUP BY 1 ORDER BY 1;
今回のアップデートでは、テーブルのスキャンを改善するためにtitlesテーブルのスキャンに対して、多次元データレイアウトのソートキーの使用を自動的に決定します。述語lower(subregion) like '%United States%'
を満たす全ての行はテーブルの専用領域に同じ場所に配置されるため、述語を満たすデータブロックのみをスキャンで済むようになり、パフォーマンスが改善します。
複数の述語を含む場合
下記の例にように、主なワークロードが複数の述語を含むクエリで構成される場合、クエリのフィルターはcost列のソートによるメリットが得られますが、available < demand
に対する最適化は行われませんでした。
SELECT * FROM items WHERE cost > 3 AND available < demand;
今回のアップデートでは、多次元データレイアウトのソートキーを使用することで、ワークロードでよく発生する 2つの述語 (cost > 3
とavailable < demand
) の組み合わせに基づいてテーブルがソートされます。その結果、テーブルの行はソートされてクエリに適用することでパフォーマンスが改善します。
自動的にこの機能を利用するには
自動テーブル最適化(ATO) 機能を有効にするか、SORTKEY AUTO
でテーブルを作成すると、Amazon Redshift はクエリ履歴を分析し、ワークロードにどちらのオプションが適しているかに応じて、テーブルの単一列ソートキーまたは多次元データレイアウトのいずれかを自動的に選択します。
最後に
多次元データレイアウトのソートキーによって、反復スキャンフィルターが含まれるワークロードのクエリのパフォーマンスが大幅に向上します。SQL Serverに関数を含んだカラムに対するインデックス指定ができる機能がありましたが、Redshiftはそれを更に拡張し、ATOによる最適化を自動化したところが優れています。今後は積極的にATOを活用していきたいところです。