Amazon Redshift のパフォーマンスチューニング - 分散キー・ソートキー・WLM の最適化
Redshift の分散スタイルとソートキーの選定、ワークロード管理 (WLM) の設計、AQUA によるクエリ高速化を解説します。
分散スタイルの選定
Redshift はデータをコンピュートノードのスライスに分散して格納します。分散スタイルの選定はクエリ性能に直結する最重要の設計判断です。KEY 分散は指定したカラムの値に基づいてデータを分散し、同じキー値を持つ行が同一スライスに配置されます。JOIN で頻繁に使用されるカラムを KEY に指定すると、JOIN 時のデータ再分散 (ネットワーク転送) が不要になり、大幅な性能改善が得られます。EVEN 分散はラウンドロビンで均等に分散し、特定の JOIN パターンがないテーブルに適しています。ALL 分散はテーブル全体を全ノードにコピーし、小さなディメンションテーブルの JOIN に有効です。AUTO 分散は Redshift がテーブルサイズに基づいて自動選択し、小さいテーブルは ALL、大きいテーブルは EVEN になります。
この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。
ソートキーとゾーンマップ
ソートキーを設定すると、データがそのカラムの値順にディスク上に格納されます。Redshift はブロックごとに最小値と最大値をゾーンマップとして記録しており、WHERE 句のフィルタ条件がゾーンマップの範囲外のブロックをスキップします。日付カラムをソートキーに設定し、WHERE created_at > '2026-01-01' のようなフィルタを適用すると、該当期間のブロックのみがスキャンされ、I/O が大幅に削減されます。複合ソートキーは複数カラムの組み合わせで、最初のカラムが最も効果的にフィルタリングされます。インターリーブドソートキーは各カラムに均等な重みを付与し、どのカラムでフィルタしても効果がありますが、VACUUM の負荷が高くなります。
ワークロード管理と AQUA
自動 WLM はクエリの複雑さとリソース要件に基づいて、キューの割り当てとメモリ配分を自動的に最適化します。短時間のダッシュボードクエリが長時間の ETL クエリにブロックされる問題を解消し、優先度の高いクエリに適切なリソースを配分します。手動 WLM では最大 8 つのキューを定義し、ユーザーグループやクエリグループに基づいてクエリをルーティングできます。AQUA はRA3 インスタンスで利用可能な機能で、フィルタリングや集約処理をストレージレイヤーのカスタムハードウェアで実行します。コンピュートノードに転送するデータ量を削減し、スキャン集約型のクエリを最大 10 倍高速化します。
さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。
まとめ
Redshift のパフォーマンスチューニングは分散スタイルとソートキーの適切な設定が基本です。SVL_QUERY_SUMMARY でスロークエリを特定し、分散キーの見直しやソートキーの追加で改善します。自動 WLM でワークロードの優先度を管理し、AQUA でスキャン性能を向上させることで、大規模データ分析の応答時間を最適化できます。
AWS の優位点
- 分散スタイル (KEY、EVEN、ALL、AUTO) の選定で JOIN 時のデータ再分散を最小化し、クエリ性能を大幅に改善できる
- ソートキーの設定で頻繁にフィルタリングされるカラムのスキャン範囲を限定し、I/O を削減できる
- 自動 WLM でクエリの優先度とリソース配分を自動最適化し、短時間クエリが長時間クエリにブロックされることを防止できる
- AQUA (Advanced Query Accelerator) はストレージレイヤーでクエリ処理を実行し、スキャン集約型クエリを最大 10 倍高速化する
- SVL_QUERY_SUMMARY と STL_ALERT_EVENT_LOG でスロークエリの原因を特定し、テーブル設計の改善に活かせる