Redshift の自動パフォーマンスチューニング機能まとめ

## はじめに
Amazon Redshift には機械学習ベースで自動的にパフォーマンスを最適化する機能が複数あります。数が増えて追いきれなくなってきたので以下にまとめます。

## Automatic Vacuum Delete
* デフォルトで有効
* [2018/12/19 に追加](https://aws.amazon.com/jp/about-aws/whats-new/2018/12/amazon-redshift-automatic-vacuum/)

UPDATE や DELETE オペレーションにより論理削除された行数にもとづいてバックグラウンドで自動的に VACCUM DELETE を実行します。これにより断片化で消費されていたスペースが解放され、ワークロードのパフォーマンスが向上します。

低負荷のときに実行するようにスケジュールされ、負荷が高い間は操作を停止します。

https://docs.aws.amazon.com/redshift/latest/dg/t_Reclaiming_storage_space202.html#automatic-table-delete

## Automatic Analyze
* デフォルト有効
* [2019/1/18 に追加](https://aws.amazon.com/jp/about-aws/whats-new/2019/01/amazon-redshift-auto-analyze/)

バックグラウンドで自動的に ANALYZE を実行し、テーブルの統計情報を更新します。これにより最適なクエリの実行計画の作成に必要な統計情報の更新処理が自動化されます。

分析はクラスターが低負荷のときに実行されます。

Automatic Analyze はデフォルトで有効になっていますが、パラメーターグループで `auto_analyze` を `false` に設定することで無効化することもできます。

https://docs.aws.amazon.com/redshift/latest/dg/t_Analyzing_tables.html#t_Analyzing_tables-auto-analyze

## Automatic Table Distribution Style
* 分散スタイルを指定しない場合は AUTO がデフォルト
* [2019/3/28 に追加](https://aws.amazon.com/jp/about-aws/whats-new/2019/03/amazon-redshift-now-automatically-picks-the-best-distribution-st/)

テーブルを作成するときにデータの分散スタイルとして AUTO を指定すると、最初は ALL、件数が増えてテーブルのサイズが大きくなってくると EVEN に自動で分散スタイルを変更します。

https://docs.aws.amazon.com/redshift/latest/dg/c_choosing_dist_sort.html

## Automatic WLM
* デフォルトで有効
* 2019/4/24 に追加？

ワークロード管理 (WLM) は Redshift がクエリに対してどのように CPU やメモリ等のリソースを割り当てるかを決める仕組みです。WLM を手動で管理する場合、キューのメモリ配分や同時実行数をユーザーが管理する必要があります。

自動 WLM を使用するとメモリ配分や同時実行数は Redshift が自動で管理します。これにより WLM での複雑なリソース割り当てを Redshift に任せ、クラスター全体で柔軟にリソースを使用できるようになります。

https://docs.aws.amazon.com/redshift/latest/dg/automatic-wlm.html

## Automatic Table Sort
* ソートキーが指定されているテーブルはデフォルトで有効
* [2019/11/25 に追加](https://aws.amazon.com/jp/about-aws/whats-new/2019/11/amazon-redshift-introduces-automatic-table-sort-alternative-vacuum-sort/)

Automatic Vacuum Delete は論理削除された領域の開放のみを行います。そのため管理者はデータのソート順をメンテナンスするために VACCUM コマンドを実行する必要がありました。Automatic Table Sort によってバックグラウンドでテーブルのソートが実行されるため、ワークロードのパフォーマンスを最適化します。

システムの負荷に応じて自動的にソートがおこなれます。大量のデータを取り込んだ直後など、任意のタイミングでソートの実行が必要な場合は、これまでどおり手動で VACCUM SORT を実行することもできます。

https://docs.aws.amazon.com/redshift/latest/dg/t_Reclaiming_storage_space202.html#automatic-table-sort

## Automatic Refresh & Rewrite Materialized Views
* デフォルトでは無効
* [2020/11/11 に追加](https://aws.amazon.com/jp/about-aws/whats-new/2020/11/amazon-redshift-announces-automatic-refresh-and-query-rewrite-for-materialized-views/)

Materialized View (MV) はクエリの結果セットを View として保存しておくことができる機能です。大量データに対して複数テーブル間の結合や集計を行うような複雑なクエリを頻繁に実行する場合にパフォーマンスを向上が期待できます。

MV は作成時点でのテーブルデータをもとに作成されるため、元テーブルのデータが変更されても MV のデータは更新されません。MV のデータを最新の状態に保つには定期的な Refresh が必要になります。

MV の自動更新を使用することで MV を最新の状態に保つことができます。機能を有効にするには CREATE MATERIALIZED VIEW または ALTER MATERIALIZED VIEW で AUTO REFRESH 句を `YES` に設定します。


https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-refresh.html#materialized-view-auto-refresh

Rewrite Materialized Views は MV を参照しないクエリに対し、MV を使用するようにクエリを自動的に書き換えることができる機能です。これによりクエリのパフォーマンス向上が期待できます。

https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-auto-rewrite.html

## Automatic Table Optimization
* ソートキー、分散キーを明示的に指定せずに作成されたテーブルではデフォルトで有効
* [2020/12/9 に追加](https://aws.amazon.com/jp/about-aws/whats-new/2020/12/amazon-redshift-announces-automatic-table-optimization/)

Redshift がクエリとテーブルの利用状況を継続的に監視し、パフォーマンスが向上すると判断した場合、自動的にソートキーや分散キーを変更します。これによりクラスターのワークロードのパフォーマンスを最適化します。

ALTER TABLE table_name ALTER sortkey|diststyle AUTO を実行して、既存のテーブルを後から自動最適化の対象とすることもできます。

https://docs.aws.amazon.com/redshift/latest/dg/t_Creating_tables.html

https://aws.amazon.com/jp/blogs/big-data/optimizing-tables-in-amazon-redshift-using-automatic-table-optimization/

## Automatic Table Column Compression Encoding
* 新規テーブルはデフォルト有効
* [2021/8/3 に追加](https://aws.amazon.com/jp/about-aws/whats-new/2021/08/amazon-redshift-automatic-table-optimization-column-compression-encoding/)


圧縮エンコーディングにはデータが追加される際、列のデータ値に適用される圧縮の種類を指定します。

テーブルに対して ENCODE AUTO を有効にすると、Redshift がテーブルのすべての列に対する圧縮エンコーディングを自動的に管理します。エンコーディングの変更によりパフォーマンス向上が向上すると判断した場合、パフォーマンスへの影響を最小限に自動的に変更します。これにより最適な圧縮エンコーディングを維持し、パフォーマンスの最適化やストレージ使用率の削減につながります。

https://docs.aws.amazon.com/redshift/latest/dg/c_Compression_encodings.html

## Automated materialized views
* デフォルトで有効
* [2022/7/12 に GA](https://aws.amazon.com/about-aws/whats-new/2022/07/automated-materialized-view-amazon-redshift/)

通常 MV を作成する際には MV の利用にメリットが有るのか、そのメリットがメンテナンスコストに見合うのか等を事前に検討、分析します。

Autemated MV は Redshift がワークロードを継続的に監視し、有益な場合は新しいマテリアライズドビューを自動的に作成します。また作成済みの Automated MV もモニタリングし、有益でなくなった場合にそれらを削除します。システムは以前に作成されたAutoMVを監視し、有益でなくなったときにそれらを削除します。

Automated MV で作成された MV についても Automatic Refresh & Rewrite Materialized Views の対象になります。

デフォルトで有効になっていますが、パラメーターグループで `auto_mv` を `false` に設定することで無効化することもできます。

https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-auto-mv.html

以上です。
参考になれば幸いです。