Amazon Aurora Serverless v2とそれ以外を実測して比較（v1 / v2 / Provisioned）

# はじめに
* 以前に「[Amazon Aurora Serverless v2とそれ以外を比較（v1 / v2 / Provisioned）](https://qiita.com/Chiharu_Tsuboi/items/3fc311ad34e6fd3dedb7)」という記事を投稿しました。
* 前回記事ではドキュメントで公表された仕様を比較しました。
* 今回はAuroraの各稼働方式で単体の性能を実測してみます。

# 性能測定
* 全稼働方式、一定の性能設定でAuroraを作成
* クライアントとしてEC2を作成
* EC2から「sysbench」を実行し、5分間の負荷テストを実行

- クライアントEC2
  - AMI「al2023-ami-2023.2.20231011.0-kernel-6.1-x86_64」
  - ボトルネックにならない程度に大きめにインスタンスタイプは「c6in.2xlarge」を利用
- 測定対象Aurora
  - 性能をあわせるため、メモリが32GBになるよう統一
  - サーバーレスは最小と最大ACUに同じ値を設定し性能を固定
  - 選択可能なMySQLの最新バージョンを採用
  - 全て同一AZでライターインスタンスを起動
  - ライターのエンドポイントに対して負荷テストを実施
- Sysbench
  - テーブル数：1件（デフォルト）
  - レコード数：10000件（デフォルト）
  - 負荷テスト時間：5分
  - 同時実行スレッド数：8
  - トランザクション：一般的なReadとWriteの組み合わせを実行

|稼働方式|性能設定|構成|備考|
|:-:|:-:|:-|:-|
|Provisioned|db.r6g.xlarge|マルチAZ 2台<br>(ライター1/リーダー1)|MySQL8.0.28<br>vCPU 4<br>メモリ32GB|
|ServerlessV1|16ACU|シングル 1台<br>(ライター1)|MySQL5.7<br>vCPU 4(推定)<br>メモリ32GB<br>※vCPUは仕様非公表|
|ServerlessV2|16ACU|マルチAZ 2台<br>(ライター1/リーダー1)|MySQL8.0.28<br>vCPU 4(推定)<br>メモリ32GB<br>※vCPUは仕様非公表|


- 実行コマンド

```shell-session
# 初期セットアップ
sudo su - ec2-user
sudo dnf install postgresql15 postgresql-libs mariadb105 luajit -y
sudo rpm -ivh ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/updates/testing/34/Everything/x86_64/Packages/s/sysbench-1.0.20-5.fc34.x86_64.rpm

# DB接続設定
DBHOST_S1='xxxxxxxxxxxxxx.cluster-cg6p7h0krbrs.ap-northeast-1.rds.amazonaws.com'
DBPASS='xxxxxxxxxxxxxx'

# database作成
echo 'CREATE DATABASE benchmark' | mysql -h ${DBHOST_S1} -P 3306 -u admin -p

# prepare
sysbench --db-driver=mysql \
      --mysql-host=${DBHOST_S1}  \
      --mysql-user=admin \
      --mysql-password=${DBPASS} \
      --mysql-db=benchmark \
      oltp_read_write \
      prepare

# run
sysbench --db-driver=mysql \
      --mysql-host=${DBHOST_S1}  \
      --mysql-user=admin \
      --mysql-password=${DBPASS} \
      --mysql-db=benchmark \
      --time=300 \
      --threads=8 \
      oltp_read_write \
      run
```

# 測定結果
|比較項目|Provisioned|ServerlessV1|ServerlessV2|
|:-:|:-:|:-:|:-:|
|性能設定|db.r6g.xlarge|16ACU|16ACU|
|ピーク時CPU使用率|67%|<font color="BLUE"><B>24%|<font color="RED"><B>81%|
|transactions(per sec)|<font color="BLUE"><B>604.41|<font color="RED"><B>102.31|533.05|
|queries(per sec)|<font color="BLUE"><B>12092.44|<font color="RED"><B>2046.74|10663.9|

- ProvisionedはServerlessV2よりも13%程度性能が良くCPU使用率も14%余力がありました。
    【所感】
    - ServerlessV2はもしかしたら旧世代のインスタンスが使われているのかもしれません
    - Provisionedと同じ条件なはずですが、V2はパフォーマンスインサイトでACUを2消費するようなのでその差の可能性も
- ServerlessV1はダントツに性能が悪いですね
    【所感】
    - MySQLバージョンが古いにしても差がありすぎな気が
    - CPUも24%と使えていないのでNWなど、別なボトルネックがあるかもしれません。
- それぞれ3回測定してみましたが誤差レベルでしか変化が無かったので全て1回目のみの結果を記載しています




Provisionedの結果↓

```shell-session
SQL statistics:
    queries performed:
        read:                            2539670
        write:                           716695
        other:                           371467
        total:                           3627832
    transactions:                        181329 (604.41 per sec.)
    queries:                             3627832 (12092.44 per sec.)
    ignored errors:                      76     (0.25 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          300.0068s
    total number of events:              181329

Latency (ms):
         min:                                    6.33
         avg:                                   13.23
         max:                                   67.91
         95th percentile:                       19.29
         sum:                              2399845.46

Threads fairness:
    events (avg/stddev):           22666.1250/555.02
    execution time (avg/stddev):   299.9807/0.00
```

ServerlessV1の結果↓
```shell-session
SQL statistics:
    queries performed:
        read:                            429940
        write:                           120295
        other:                           63932
        total:                           614167
    transactions:                        30701  (102.31 per sec.)
    queries:                             614167 (2046.74 per sec.)
    ignored errors:                      9      (0.03 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          300.0688s
    total number of events:              30701

Latency (ms):
         min:                                   70.64
         avg:                                   78.18
         max:                                  147.17
         95th percentile:                       86.00
         sum:                              2400260.31

Threads fairness:
    events (avg/stddev):           3837.6250/160.80
    execution time (avg/stddev):   300.0325/0.02
```

ServerlessV2の結果↓
```shell-session
SQL statistics:
    queries performed:
        read:                            2239594
        write:                           625977
        other:                           333665
        total:                           3199236
    transactions:                        159919 (533.05 per sec.)
    queries:                             3199236 (10663.90 per sec.)
    ignored errors:                      52     (0.17 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          300.0048s
    total number of events:              159919

Latency (ms):
         min:                                    7.20
         avg:                                   15.01
         max:                                   83.70
         95th percentile:                       22.28
         sum:                              2399837.32

Threads fairness:
    events (avg/stddev):           19989.8750/115.72
    execution time (avg/stddev):   299.9797/0.00
```

# パフォーマンスインサイト
- Provisioned
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/ebaa16d8-69e9-6dbd-ad7e-2839cb03ce59.png)

- ServerlessV1
※V1はパフォーマンスインサイトが使えないためCPUのみ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/2baefcba-0215-a6bc-4b6b-c14c7e70defb.png)

- ServerlessV2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/5a2ba22f-cbac-9571-ca24-04cf4d97c4f9.png)

# まとめ
- 単体ではProvisionedが優秀な性能を発揮。
- NW等、考えられる条件は同一なのですがServerlessの結果は疑問が多く残りました。
- もう少しバリエーションを追加して次回検証してみたいと思います。

# 参考サイト
* Amazon Aurora が Graviton3 搭載インスタンス(R7g)をサポートしました
https://dev.classmethod.jp/articles/aurora-graviton3-r7g/
　※測定方法など参考にさせていただきました