Amazon Redshift のパフォーマンスチューニング - 分散キー・ソートキー・ WLM の最適化

Redshift の分散スタイルとソートキーの選定、ワークロード管理 (WLM) の設計、AQUA によるクエリ高速化を解説します。

分散スタイルの選定

Redshift はデータをコンピュートノードのスライスに分散して格納します。分散スタイルの選定はクエリ性能に直結する最重要の設計判断です。KEY 分散は指定したカラムの値に基づいてデータを分散し、同じキー値を持つ行が同一スライスに配置されます。JOIN で頻繁に使用されるカラムを KEY に指定すると、JOIN 時のデータ再分散 (ネットワーク転送) が不要になり、大幅な性能改善が得られます。EVEN 分散はラウンドロビンで均等に分散し、特定の JOIN パターンがないテーブルに適しています。ALL 分散はテーブル全体を全ノードにコピーし、小さなディメンションテーブルの JOIN に有効です。AUTO 分散は Redshift がテーブルサイズに基づいて自動選択し、小さいテーブルは ALL、大きいテーブルは EVEN になります。

ソートキーとゾーンマップ

ソートキーを設定すると、データがそのカラムの値順にディスク上に格納されます。Redshift はブロックごとに最小値と最大値をゾーンマップとして記録しており、WHERE 句のフィルタ条件がゾーンマップの範囲外のブロックをスキップします。日付カラムをソートキーに設定し、WHERE created_at > '2026-01-01' のようなフィルタを適用すると、該当期間のブロックのみがスキャンされ、I/O が大幅に削減されます。複合ソートキーは複数カラムの組み合わせで、最初のカラムが最も効果的にフィルタリングされます。インターリーブドソートキーは各カラムに均等な重みを付与し、どのカラムでフィルタしても効果がありますが、VACUUM の負荷が高くなります。

ワークロード管理と AQUA

自動 WLM はクエリの複雑さとリソース要件に基づいて、キューの割り当てとメモリ配分を自動的に最適化します。短時間のダッシュボードクエリが長時間の ETL クエリにブロックされる問題を解消し、優先度の高いクエリに適切なリソースを配分します。手動 WLM では最大 8 つのキューを定義し、ユーザーグループやクエリグループに基づいてクエリをルーティングできます。 AQUA は RA3 インスタンスで利用可能な機能で、フィルタリングや集約処理をストレージレイヤーのカスタムハードウェアで実行します。コンピュートノードに転送するデータ量を削減し、スキャン集約型のクエリを最大 10 倍高速化します。 データウェアハウスの活用事例を知るうえで関連書籍 (Amazon)が参考になります。

パフォーマンスチューニングのコスト影響

適切なパフォーマンスチューニングは直接的なコスト削減につながります。分散キーの最適化でノード間のデータ再分散 (Redistribution) を削減すると、クエリの実行時間が短縮され、Serverless の RPU 消費量が減少します。ソートキーの設定でゾーンマップのスキップ率を向上させると、スキャンするデータ量が減り、I/O コストが削減されます。AQUA (Advanced Query Accelerator) は RA3 ノードで追加料金なしで利用でき、LIKE 句やフィルタリングの処理をストレージレイヤーにオフロードしてクエリ性能を向上させます。

まとめ

Redshift のパフォーマンスチューニングは分散スタイルとソートキーの適切な設定が基本です。SVL_QUERY_SUMMARY でスロークエリを特定し、分散キーの見直しやソートキーの追加で改善します。自動 WLM でワークロードの優先度を管理し、AQUA でスキャン性能を向上させることで、大規模データ分析の応答時間を最適化できます。