Redshift Serverlessと他のサーバーレス集計サービス、Glue Data Catalogのテーブルへのクエリ実行 - sambaiz-net
現在PreviewのRedshift ServerlessとAthenaでデータベースのベンチマークであるTPC-DSのクエリを実行し性能を比較する。
(追記: 2022-07-13) 以下はコストをPreview時点のレートで計算しているが、GAになったタイミングで30%ほどコストが下がった。
GlueのTPC-DS Connectorで合計1TBのデータを生成しS3に保存した。 IAM Roleなどのリソースを作るCDKのコードはGitHubにある。
GlueのTPC-DS Connectorでデータを生成する - sambaiz-net
まずはjsonとparquetのデータに対して次のクエリを実行してみる。
select /* TPC-DS query96.tpl 0.1 */ count(*)
from store_sales
,household_demographics
,time_dim, store
where ss_sold_time_sk = time_dim.t_time_sk
and ss_hdemo_sk = household_demographics.hd_demo_sk
and ss_store_sk = s_store_sk
and time_dim.t_hour = 8
and time_dim.t_minute >= 30
and household_demographics.hd_dep_count = 5
and store.s_store_name = 'ese'
order by count(*)
limit 100;
結果は次の通り。
service | format | run time (sec) | cost (ap-northeast-1) |
---|---|---|---|
Athena | json | 738.205 | $0.94 (188.29 GB) |
Redshift Serverless (Base RPU=128) | json | 1051.927 | $26.18 |
Redshift Serverless (Base RPU=256) | json | 1052.061 | $52.37 |
Athena | parquet | 9.71 | $0.027 (5.49 GB) |
Redshift Serverless (Base RPU=32) | parquet | 10.745 | $0.07 |
Redshift Serverless (Base RPU=128) | parquet | 5.831 | $0.15 |
Redshift Serverless (Base RPU=256) | parquet | 4.684 | $0.23 |
コストは東京リージョンの
- Redshift Serverless: $0.70/RPU hour
- Athena: $5/TB
で計算している。ただしRedshift ServerlessのクエリごとのCompute usageが確認できないので Base RPU * run time での概算となっている。
jsonだとAthenaの方が実行時間が短く、Redshift ServerlessはBase RPUを上げても速くなっていない。 むしろ実行時間が変わらないのでコストが倍になっている。コンピュートリソースに依存しないロード部分に大半の時間がかかっているのかもしれない。 Athenaはロード量による課金なのでロードに時間がかかってもコストは大きくなりづらいが、Redshift Serverlessは高く付いてしまう。
parquetだとロード量が減る分Athenaのコストは抑えられるが、実行時間も格段に短くなるのでRedshift Serverlessのコスト減の恩恵が大きい。 また、実行時間のロードが占める割合が減ったからかBase RPUを上げることで実行時間が短くなっている。
カラムナフォーマットParquetの構造とReadの最適化 - sambaiz-net
parquetで他のクエリも実行していく。
query | service | run time (sec) | cost (ap-northeast-1) |
---|---|---|---|
query7.tpl 0.2 | Athena | 15.747 | $0.20 (40.84 GB) |
query7.tpl 0.2 | Redshift Serverless (Base RPU=32) | 31.432 | $0.20 |
query75.tpl 0.3 | Athena | 34.847 | $0.45 (90.73 GB) |
query75.tpl 0.3 | Redshift Serverless (Base RPU=32) | 204.145 | $1.27 |
query39.tpl 0.5 | Athena | 9.394 | $0.0001 (261.39 MB) |
query39.tpl 0.5 | Redshift Serverless (Base RPU=32) | 23.335 | $0.15 |
query80a.tpl 0.6 | Athena | 52.105 | $0.99 (198.92 GB) |
query80a.tpl 0.6 | Redshift Serverless (Base RPU=32) | 114.645 | $0.71 |
query80a.tpl 0.6 | Redshift Serverless (Base RPU=64) | 39.244 | $0.49 |
query64.tpl 0.20 | Athena | 70.997 | $0.66 (131.89 GB) |
query64.tpl 0.20 | Redshift Serverless (Base RPU=64) | 126.752 | $1.58 |
少なくともこの規模ではAthenaの方が全体的にコストに対する性能に優れているように見えるが、 Redshift Serverlessの方が速くコストも安く抑えられるケースもあることが分かった。 ロード量がそれなりにあり、かつクエリが複雑でコンピュートリソースを十分活用できるであろう場合に試してみると良いんじゃないかと考えている。