ablog

不器用で落着きのない技術者のメモ

Amazon Redshift で Elastic resize の完了を確認する方法

Amazon Redshift で Elastic resize した後、バックグラウンドでノードスライスにデータを再分配が完了するまではクエリの実行に時間がかかる可能性がある。

2. このオペレーションはクラスターのメタデータを移行します。クラスターは数分間使用できません。クエリの大部分は一時的に停止され、接続は開いた状態になります。ただし、一部のクエリは削除される可能性があります。この段階は短い。
3. セッション接続が回復し、クエリが再開します。
4. 伸縮自在なサイズ変更は、バックグラウンドでノードスライスにデータを再分配します。クラスターは読み取りと書き込み操作に利用できますが、一部のクエリは実行に時間がかかる可能性があります。
5. 操作が完了すると、Amazon Redshift はイベント通知を送信します。

クラスターのサイズ変更 - Amazon Redshift

Amazon Redshift では、クラスターのスライスからノードへのマッピングが変更されると、Elastic リサイズの実行時にスライスのシャッフルが発生します。Amazon Redshift はデータをスライス全体に均等に分散して並列処理するため、ノードを追加または削除するとスライスが再分散されます。この再分散では、新しいスライス間でデータが分散され、効率的なパフォーマンスが維持されます。Elastic リサイズの実行にかかる時間は、クラスターのサイズ、データ量、およびワークロードアクティビティによって異なります。

Amazon Redshift での Elastic リサイズに関するトラブルシューティング | AWS re:Post

リサイズが完了すると、以下の AWS CLI コマンドを実行結果で Status が "SUCCEEDED" になる(リサイズ中は "IN_PROGRESS")。

aws redshift describe-resize --cluster-identifier mycluster
Amazon Redshift category Event ID Event severity Description
Monitoring REDSHIFT-EVENT-3537 INFO Cluster '[cluster name]' data transfer completed at [time in UTC].
Amazon Redshift プロビジョニングされたクラスターのイベント通知 - Amazon Redshift

実行例

  • Elasitc resize でクラスターのノード数を変更する。
% aws redshift resize-cluster \
    --cluster-identifier redshift-cluster-poc-central \
    --cluster-type multi-node \
    --node-type ra3.4xlarge \
    --number-of-nodes 4 \
    --no-classic
  • リサイズの状態を確認する
% while true
do
date -Iseconds
aws redshift describe-resize --cluster-identifier redshift-cluster-poc-central
sleep 30s
done

2025-06-11T05:27:37+09:00
{
    "TargetNodeType": "ra3.4xlarge",
    "TargetNumberOfNodes": 4,
    "TargetClusterType": "multi-node",
    "Status": "IN_PROGRESS", <-- 変更中は "IN_PROGRESS" になる
    "ResizeType": "ElasticResize",
    "TargetEncryptionType": "NONE"
}

...

2025-06-11T05:34:59+09:00
{
    "TargetNodeType": "ra3.4xlarge",
    "TargetNumberOfNodes": 4,
    "TargetClusterType": "multi-node",
    "Status": "SUCCEEDED",  <-- 完了すると "SUCCEEDED" になる
    "ResizeType": "ElasticResize",
    "Message": "Elastic resize completed successfully.",
    "TargetEncryptionType": "NONE"
}   
  • マネジメントコンソール([Amazon Redshift] - [Event])のイベントには完了すると REDSHIFT-EVENT-3537 が出力される。

  • STV_UNDERREPPED_BLOCKS
export PGPASSWORD="hoge"
while
true
do
date -Iseconds
aws redshift describe-resize --cluster-identifier redshift-cluster-trailing
psql -h alter-add-column-lab.********.ap-northeast-1.redshift.amazonaws.com -p 5439 -d dev -U awsuser -c "SELECT COUNT(1) FROM STV_UNDERREPPED_BLOCKS;"
sleep 10s
done

 -- count が 0 になれば OK
 count 
---------
 0