Amazon Redshift RGインスタンス vs RA3インスタンス - クラスタのパフォーマンス・コストを TPC-H 10GB で比較してみた

Amazon Redshift RGインスタンス vs RA3インスタンス - クラスタのパフォーマンス・コストを TPC-H 10GB で比較してみた

Amazon Redshift の新世代 RG インスタンス(Graviton ベース)と従来の RA3 インスタンスの性能・コスト効率を、TPC-H 10GB を使って実測比較しました。レイテンシ、ロード性能、そして東京リージョン単価での コスト効率の結果をお伝えします。
2026.05.17

クラウド事業本部の石川です。5/14にAmazon Redshift の新世代 RG インスタンス(Graviton ベース)が発表されました。本日は、新世代 RG インスタンス(Graviton ベース)と従来の RA3 インスタンスの性能差を、TPC-H 10GB を使って実測比較してみました。

https://dev.classmethod.jp/articles/amazon-redshift-rg-instances-graviton/

2026 年 5 月、AWS は Amazon Redshift の新しいコンピュートノードとして RG インスタンス(AWS Graviton ベース、データレイククエリエンジン統合)をリリースしました。AWS 公式ブログでは、従来の RA3 インスタンスに対して以下の性能・コスト改善が公表されています。

比較項目 RG の公称値(RA3 比)
データウェアハウスワークロード 最大 2.2 倍
Apache Iceberg クエリ 最大 2.4 倍
Apache Parquet クエリ 最大 1.5 倍
vCPU 単価 30% 削減

これらは理想条件下のピーク値であり、実ワークロードでの再現性は自社で検証する必要があります。今回は、rg.xlarge × 2 ノードra3.xlplus × 2 ノード の両クラスタを us-east-1 に用意し、TPC-H 10GB のローカルテーブルに対する 22 クエリのレイテンシを 2 時間枠で実測しました。

https://dev.classmethod.jp/articles/20260516-amazon-redshift-benchmark-data/

最初に結論

rg.xlarge × 2ra3.xlplus × 2 を us-east-1 にて TPC-H 10GB で比較した結果、以下が確認できました。

  • クエリレイテンシ: 22 クエリ speedup 中央値 1.51 倍(合計 7.52 秒 → 11.26 秒)
  • コスト効率(東京リージョン単価で試算): 同一ワークロードでの円 / クエリ比 0.47rg が約 53% 安い
  • COPY ロード性能: 8 表合計 speedup 1.38 倍(83 秒 → 114 秒)

検証環境

項目 RG クラスタ(rg2) RA3 クラスタ(xlplus2)
インスタンスタイプ rg.xlarge ra3.xlplus
ノード数 2 2
vCPU / ノード 4 4
メモリ / ノード 32 GB 32 GB
ストレージ Redshift Managed Storage Redshift Managed Storage
リージョン us-east-1 us-east-1
対象スキーマ tpch10g tpch10g
パラメータグループ default.redshift-2.0 default.redshift-2.0

rg.xlargera3.xlplus は vCPU・メモリのスペック上は同一です。RG は AWS Graviton ベースで「データウェアハウスとデータレイクの統合クエリエンジン」を内蔵している点が大きな違いになります。

両クラスタには事前に AWS Labs CloudDataWarehouseBenchmark の TPC-H 10GB データ(8 表・約 8,659 万行)を COPY 済みです。

https://github.com/awslabs/amazon-redshift-utils/tree/master/src/CloudDataWarehouseBenchmark

やってみた

検証は次の流れで進めました。

前提条件

  • 両クラスタは available 状態、TPC-H 10GB を tpch10g スキーマに COPY 済み
  • リージョン: us-east-1
  • 接続: Redshift Data API(batch-execute-statement / describe-statement
  • 計測 PC: MacBook

検証準備: 両クラスタの状態を揃える

クエリ性能比較で大きく結果が変わる要素として、(1) データ件数と統計情報、(2) Result Cache、(3) Concurrency Scaling、(4) search_path の差分があります。それぞれ次のように揃えました。

件数照合と統計情報の更新

両クラスタで TPC-H 8 表の件数を取得して完全一致を確認し、ANALYZE を再実行して統計情報を最新化します。結果は両クラスタ完全一致でした。

テーブル 件数
region 5
nation 25
supplier 100,000
customer 1,500,000
part 2,000,000
partsupp 8,000,000
orders 15,000,000
lineitem 59,986,052
合計 約 8,659 万行

続けて、両クラスタで全 8 表に ANALYZE を実行します。execute-statement は単一 SQL しか受け付けないので、batch-execute-statement で複数文を 1 リクエストにまとめます。

for CLUSTER in rg2 xlplus2; do
  aws redshift-data batch-execute-statement \
    --cluster-identifier ${CLUSTER} --database dev --db-user awsuser \
    --region us-east-1 \
    --sqls "ANALYZE tpch10g.region" "ANALYZE tpch10g.nation" \
            "ANALYZE tpch10g.supplier" "ANALYZE tpch10g.customer" \
            "ANALYZE tpch10g.part" "ANALYZE tpch10g.partsupp" \
            "ANALYZE tpch10g.orders" "ANALYZE tpch10g.lineitem"
done

テーブル分散状況の比較

SVV_TABLE_INFO でテーブルの圧縮後サイズ・分散キー・スキューが両クラスタで揃っているか確認します。

aws redshift-data execute-statement \
  --cluster-identifier rg2 --database dev --db-user awsuser --region us-east-1 \
  --sql "SELECT \"table\", size, tbl_rows, skew_rows, sortkey1, diststyle
         FROM svv_table_info WHERE schema='tpch10g' ORDER BY \"table\""

両クラスタとも size / tbl_rows / diststyle / sortkey1 まで完全に一致しました(AUTO(ENCODE) で同じ列圧縮、KEY 分散も同一)。

テーブル size (MB) dist key sort key
region 36 KEY(r_regionkey) r_regionkey
nation 56 KEY(n_nationkey) n_nationkey
supplier 80 KEY(s_suppkey) s_suppkey
part 176 KEY(p_partkey) p_partkey
customer 200 KEY(c_custkey) c_custkey
partsupp 532 KEY(ps_partkey) ps_partkey
orders 768 KEY(o_orderkey) o_orderdate
lineitem 2,765 KEY(l_orderkey) l_shipdate

Result Cache の無効化と search_path 設定

クエリ性能の素の値を比較するには Result Cache を確実に無効化する必要があります。Redshift Data API は execute-statementSET ...; SELECT ... のような複数文を送ると先頭の SET だけを処理してしまうため、後述するベンチマークスクリプトでは batch-execute-statementSET enable_result_cache_for_session = OFF と TPC-H クエリを 1 セッション内で続けて実行する形にしました。

また、tpch10g スキーマに修飾なしでアクセスできるよう、awsusersearch_path を両クラスタに永続設定します。

for CLUSTER in rg2 xlplus2; do
  aws redshift-data execute-statement \
    --cluster-identifier ${CLUSTER} --database dev --db-user awsuser \
    --region us-east-1 \
    --sql "ALTER USER awsuser SET search_path = tpch10g, public"
done

シナリオ①: COPY ロード性能

クラスタ作成時に取得済みの 2 件の evidence/<run_id>/copy_durations.tsv を引用し、テーブル別のロード時間を比較します。duration_msaws redshift-data describe-statement --query Duration が返す値(ナノ秒)を ms に換算したものです。

テーブル rg2 duration (ms) xlplus2 duration (ms) speedup (xlplus2 / rg2)
region 563 1,060 1.88
nation 591 983 1.66
supplier 1,006 1,413 1.40
customer 2,567 3,299 1.29
part 2,457 3,237 1.32
partsupp 8,480 11,003 1.30
orders 12,713 16,754 1.32
lineitem 54,557 76,429 1.40
合計 82,934(約 83.0 秒) 114,178(約 114.2 秒) 約 1.38

8 表の合計ロード時間は rg2 が約 83 秒、xlplus2 が約 114 秒で、RG が 約 1.38 倍速く ロードを完了しました。特に最大テーブルの lineitem(約 6,000 万行 / 2.7GB)は 54.6 秒 vs 76.4 秒で、Graviton + 統合 I/O エンジンが大きなテーブルでも安定して効いている印象です。

小さい region / nation は speedup 倍率が大きく見えますが、絶対値が ms オーダーなので解釈には注意が必要です。

シナリオ②: TPC-H 22 クエリのレイテンシ計測

対象クエリ(TPC-H 22 クエリ全本)

TPC-H 10GB はサイズが小さく、22 クエリ × 3 回 × 2 クラスタ = 132 実行でも 60 分以内に収まる見込みのため、標準 22 クエリを全本対象とする。短/中/長の時間レンジ・JOIN/集約/サブクエリ/Window/CASE のすべての特性をカバーできる。

https://github.com/awslabs/amazon-redshift-utils/blob/master/src/CloudDataWarehouseBenchmark/Cloud-DWB-Derived-from-TPCH/10GB/queries/query_0.sql

Q# 時間カテゴリ 主特性 期待される RG の効きどころ
Q1 lineitem 単表大集約 CPU / I/O
Q2 多表結合 + サブクエリ オプティマイザ
Q3 3 表結合 + 集約 CPU
Q4 半結合 EXISTS サブクエリ最適化
Q5 6 表結合 + 年次集約 再分散
Q6 単表 lineitem + 範囲述語 I/O / pruning
Q7 7 表結合 + 年次集約 JOIN 順序
Q8 8 表結合 + 比率算出 集約 + 結合
Q9 6 表結合 + 大集約 CPU / I/O
Q10 4 表結合 + Top-N ソート
Q11 サブクエリ + GROUP BY HAVING 集約
Q12 lineitem + orders + CASE 集約 I/O / CASE
Q13 外部結合 + 集約 NULL 処理
Q14 lineitem + part + CASE 比率 CPU
Q15 View(WITH)+ 結合 CTE 展開
Q16 NOT IN + 多列集約 反結合
Q17 相関サブクエリ サブクエリ最適化
Q18 3 表結合 + Top-N ソート / 結合
Q19 lineitem + part + 複合 OR フィルタ最適化
Q20 階層サブクエリ + 半結合 サブクエリ最適化
Q21 自己結合(lineitem 3 回) 結合再分散
Q22 サブクエリ + 集約 集約

ベンチマークスクリプト

AWS Labs CloudDataWarehouseBenchmark 配下の Cloud-DWB-Derived-from-TPCH/10GB/queries/query_0.sql には 22 クエリが 1 ファイルに連結されています。これを Python で 22 ファイルに分割し、Q15 だけ revenue ビューが必要だったので WITH 句に書き換えた上で、Bash 製の run_benchmark.sh から batch-execute-statement で順次投入しました。

# run_benchmark.sh の主要部
run_sql() {
  local sql_raw="$1"
  local label="$2"
  local batch_id
  batch_id=$(aws redshift-data batch-execute-statement \
    --cluster-identifier "${CLUSTER}" \
    --database "${DATABASE}" \
    --db-user "${DB_USER}" \
    --region "${REGION}" \
    --statement-name "${TARGET}-${label}" \
    --sqls "SET enable_result_cache_for_session = OFF" "${sql_raw}" \
    --query 'Id' --output text)
  # 完了待ち + 結果 SubStatement[1] の Duration を採用
}

計測方針は以下の通りです。

項目 設定
計測回数 ウォームアップ 1 回 + 本計測 3 回
評価値 Data API Duration(ナノ秒)の median
Result Cache SET enable_result_cache_for_session = OFF を必ず先行実行
クラスタ rg2 / xlplus2 を端末から並列起動

execute-statement は新しいセッションで実行されるため、batch-execute-statement で SET 文と本体クエリを同セッションに同梱することで Result Cache を確実に切ります。先行ウォームアップで Q01 を 3 回回すと dur=604/615/615 ms と安定しており、Result Cache が効いていないことを実測でも確認できました。

計測結果(median ms)

# rg2 / xlplus2 を別端末から同時起動
./scripts/run_benchmark.sh --target rg2 --cluster-identifier rg2 \
  --database dev --db-user awsuser --region us-east-1 --iterations 3
./scripts/run_benchmark.sh --target xlplus2 --cluster-identifier xlplus2 \
  --database dev --db-user awsuser --region us-east-1 --iterations 3

ウォームアップ 1 回 + 本計測 3 回(合計 88 実行 × 2 クラスタ = 176 実行)が両クラスタとも全クエリ FINISHED で完了しました。median 値と speedup を以下にまとめます。

Query rg2 median (ms) xlplus2 median (ms) speedup (xlplus2 / rg2)
Q01 605 907 1.50
Q02 238 389 1.63
Q03 225 313 1.39
Q04 192 279 1.45
Q05 277 364 1.31
Q06 64 77 1.20
Q07 256 384 1.50
Q08 268 414 1.54
Q09 524 774 1.48
Q10 354 540 1.53
Q11 139 207 1.49
Q12 134 203 1.51
Q13 806 1,334 1.66
Q14 132 173 1.31
Q15 176 271 1.54
Q16 417 632 1.52
Q17 266 386 1.45
Q18 889 1,179 1.33
Q19 318 491 1.54
Q20 248 418 1.69
Q21 707 1,079 1.53
Q22 289 448 1.55
合計 7,524 ms 11,262 ms 1.50

22 クエリの speedup を集計すると以下になりました。

  • speedup 中央値: 1.51 倍
  • speedup 平均: 1.48 倍
  • speedup 最大: 1.69 倍(Q20: 階層サブクエリ + 半結合)
  • speedup 最小: 1.20 倍(Q06: 単表 lineitem + 範囲述語、もともと 64ms と短い)

公称値の「最大 2.2 倍」は届きませんでしたが、これはピーク値であり、22 クエリ平均で 1.5 倍前後が出ているのは妥当な水準だと考えられます。Q13・Q20 のような結合や半結合が多いクエリ、Q01・Q21 の重い集計クエリで 1.5〜1.7 倍が出ていて、ワークロードが厳しいほど効きが大きい印象です。

シナリオ③: コスト効率(円 / クエリ・東京リージョン前提)

レイテンシ計測自体は us-east-1 で実施しましたが、実運用を想定して 東京リージョン (ap-northeast-1) のオンデマンド単価で円 / クエリを試算します。単価は検証日 (2026-05-17) の aws pricing get-products で取得した値、為替は 1 USD = ¥150 の概算 TTM を使い、以下の式で算定します。

aws pricing get-products --service-code AmazonRedshift --region us-east-1 \
  --filters "Type=TERM_MATCH,Field=instanceType,Value=rg.xlarge" \
            "Type=TERM_MATCH,Field=location,Value=Asia Pacific (Tokyo)" \
            "Type=TERM_MATCH,Field=productFamily,Value=Compute Instance"

クラスタ稼働コスト(円/秒) = ノード単価(USD/h) × ノード数 × 為替(JPY/USD) ÷ 3600
1 クエリあたりコスト(円) = median レイテンシ(秒) × クラスタ稼働コスト(円/秒)

クラスタ ノード単価 (USD/h, 東京) ノード数 稼働コスト (円/秒)
rg2 (rg.xlarge) 0.8946 2 ¥0.07455
xlplus2 (ra3.xlplus) 1.278 2 ¥0.10650

ノード単価だけで見ると rg.xlargera3.xlplus 比で約 30% 安く、22 クエリの median 合計と単価を掛け合わせると、次のようになります。

指標 rg2 xlplus2 rg2 / xlplus2
22 クエリ合計 median 7.52 秒 11.26 秒 0.67
クエリセット合計コスト ¥0.5609 ¥1.1994 0.47
1 クエリ平均コスト ¥0.02550 ¥0.05452

コスト比 (rg2 / xlplus2) は 0.47、つまり同じ 22 クエリを東京リージョンで実行するのに rg2 のほうが約 53% 安く済む 結果になりました。「vCPU 単価 30% 削減」と「レイテンシ 1.5 倍速」が掛け合わさり、コスト効率では 2 倍近い差が出る形です。

レイテンシは us-east-1 の実測値、コストは東京リージョン単価で試算しています。リージョン間のレイテンシ差は本検証では考慮していません。並列実行下のスループットも計測しておらず、単発レイテンシ × 単価で算出した値であるため、実運用の同時実行性能を反映するものではありません。

考察

検証して感じたポイントを整理します。

  • ローカルテーブル対象、22 クエリ平均で 1.5 倍のレイテンシ高速化が安定して出る: 短クエリ(Q06: 64ms / Q14: 132ms)でも 1.2〜1.3 倍、重いクエリ(Q01・Q13・Q18・Q21 など 500ms 以上)で 1.5〜1.7 倍と、レンジを問わず一定の改善が確認できました。公称の「最大 2.2 倍」はピーク値で、ワークロード全体ではこれより低い倍率が現実的だと感じます。
  • コスト効率は約 53% 削減(東京リージョン換算): rg.xlarge は ra3.xlplus に対してノード単価が約 30% 安く(東京: $0.8946/h vs $1.278/h)、その上でレイテンシも 1.5 倍速なので、円 / クエリで見ると半分以下になります。同じワークロードを 1 / 2 のコストで動かせる計算で、ノード単価表だけ眺めるよりインパクトが大きい結果でした。
  • COPY ロードも約 1.38 倍速い: クエリ性能ほどではないですが、TPC-H 10GB の 8 表合計で 83 秒 vs 114 秒。Graviton と統合 I/O の効果は単発クエリだけでなく書き込み系にも出ています。dev 環境のリストアやサンプルデータ投入が早く済むメリットは小さくないと思います。
  • Redshift Data API で正しく Result Cache を切るには batch-execute-statement が必要: execute-statementSET ...; SELECT ... を送ると先頭の SET だけ実行されて結果セットが空のまま FINISHED になります。今回は SET enable_result_cache_for_session = OFF と本体クエリを batch-execute-statement の 2 SQL として同セッションで投げ、SubStatements[1].Duration を採用する形にしました。
  • 公平性を担保するには default.redshift-2.0 パラメータグループの揃え方も要確認: 今回は両クラスタとも default.redshift-2.0 を使用しており、AutoMV や analyze_threshold_percent 等もデフォルトのまま揃えています。本気で再現性を求める場合はカスタムパラメータグループを切る方が安全ですが、defaults 同士の比較でもデータ・統計情報・search_path・Result Cache を揃えれば 1.5 倍前後の差は安定して観測できます。
  • 同時実行スループットは別途検証が必要: 単発レイテンシしか測っていないため、複数ユーザー / 複数クエリ並列下の挙動(Concurrency Scaling、WLM スロット争奪)は別の検証で追う必要があります。BI ツールからの実 E2E や、大規模 ETL での挙動評価は本検証のスコープ外です。

最後に

rg.xlarge × 2ra3.xlplus × 2 を us-east-1 にて TPC-H 10GB で比較した結果、以下が確認できました。

  • クエリレイテンシ: 22 クエリ speedup 中央値 1.51 倍(合計 7.52 秒 → 11.26 秒)
  • コスト効率(東京リージョン単価で試算): 同一ワークロードでの円 / クエリ比 0.47(rg2 が約 53% 安い)
  • COPY ロード性能: 8 表合計 speedup 1.38 倍(83 秒 → 114 秒)

公称値(最大 2.2 倍)はあくまでピーク値ですが、TPC-H 10GB という比較的軽量なワークロードでも 1.5 倍前後・コスト半減という成果が、決定論的・再現性の高い手順で得られました。RA3 を本番運用していて RG への移行を検討している方の判断材料の一助になれば幸いです。

並列スループットや Iceberg 外部テーブルに対する性能差、より大きいデータセット(100GB・1TB)での比較はクレジットがもらえたら別の検証で追っていきます。

合わせて読みたい

https://aws.amazon.com/jp/blogs/aws/amazon-redshift-introduces-aws-graviton-based-rg-instances-with-an-integrated-data-lake-query-engine/

https://aws.amazon.com/jp/about-aws/whats-new/2026/05/amazon-redshift-rg-instances-powered-by-graviton/

https://github.com/awslabs/amazon-redshift-utils/tree/master/src/CloudDataWarehouseBenchmark

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事