TPC-DSのクエリを用いたRedshift ServerlessとAthenaの性能比較

databaseawspresto

Redshift Serverlessと他のサーバーレス集計サービス、Glue Data Catalogのテーブルへのクエリ実行 - sambaiz-net

現在PreviewのRedshift ServerlessとAthenaでデータベースのベンチマークであるTPC-DSのクエリを実行し性能を比較する。

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の方が速くコストも安く抑えられるケースもあることが分かった。 ロード量がそれなりにあり、かつクエリが複雑でコンピュートリソースを十分活用できるであろう場合に試してみると良いんじゃないかと考えている。