AuroraServerlessV2の限界性能を実測してみた（ACU128）

# はじめに
* Amazon Aurora Serverless v2の最大性能であるACU128をsysbenchで測定しました。
* 比較のために別記事で測定したACU16の結果も掲載しています。

# 測定条件
* クライアントとしてEC2を作成
* EC2から「sysbench」を実行し、5分間の負荷テストを実行

- クライアントEC2
  - AMI「al2023-ami-2023.2.20231011.0-kernel-6.1-x86_64」
  - ボトルネックにならない程度に大きめにインスタンスタイプは「c6in.2xlarge」を利用
- 測定対象Aurora
  - 性能：最小と最大ACUに同じ値を設定し性能を固定
  - EC2と同一AZにライターインスタンス、別AZにリードレプリカ1台
  - ライターのエンドポイントに対して負荷テストを実施
- Sysbench
  - テーブル数：1件（デフォルト）
  - レコード数：10000件（デフォルト）
  - 負荷テスト時間：5分
  - 同時実行スレッド数：8
  - トランザクション：一般的なReadとWriteの組み合わせを実行


|稼働方式|性能設定|構成|備考|
|:-:|:-:|:-|:-|
|ServerlessV2|16ACU|マルチAZ 2台<br>(ライター1/リーダー1)|MySQL8.0.28<br>vCPU 4(推定)<br>メモリ32GB<br>※vCPUは仕様非公表|
|ServerlessV2|128ACU|マルチAZ 2台<br>(ライター1/リーダー1)|MySQL8.0.28<br>vCPU 32(推定)<br>メモリ256GB<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
```

# 測定結果
|項目|16ACU(参考)|128ACU|比較|
|:-:|:-:|:-:|:-:|
|ピーク時CPU使用率|81%|<font color="BLUE"><B>14%|-67%|
|transactions(per sec)|533.05|<font color="BLUE"><B>752.87|+41%|
|queries(per sec)|10663.9|<font color="BLUE"><B>15061.92|+41%|
|queries(per sec)|10663.9|<font color="BLUE"><B>15061.92|+41%|

- 比較するとCPU使用率は約5.78倍の負荷軽減
- 5分間でのトランザクション実行数は1.4倍に増加
- ACUが16→128の8倍に対して実測性能5.78*1.4=8.1倍の性能でほぼ理論通りですね


128ACUの結果↓
```shell-session
SQL statistics:
    queries performed:
        read:                            3163328
        write:                           893467
        other:                           461954
        total:                           4518749
    transactions:                        225869 (752.87 per sec.)
    queries:                             4518749 (15061.92 per sec.)
    ignored errors:                      83     (0.28 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          300.0100s
    total number of events:              225869

Latency (ms):
         min:                                    6.16
         avg:                                   10.63
         max:                                   60.57
         95th percentile:                       12.30
         sum:                              2399900.12

Threads fairness:
    events (avg/stddev):           28233.6250/299.32
    execution time (avg/stddev):   299.9875/0.00
```

# パフォーマンスインサイト
- 128ACU
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/9e2f3db8-aaf4-ac15-d7ff-5908ade3f87a.png)


# まとめ
- リソースの性能も使い切れていませんが、計算するとほぼACUに比例した実測結果となりました
- 利用料金が怖いので1回しか測定しておらず、[FargateのようなCPUガチャ](https://blog.father.gedow.net/2021/05/21/aws-ecs-fargate-cpu/)が存在するかは不明です。
- 今回は1ACUあたりの性能（インスタンスの種類）は最大の128ACUでも変わっていないと推測できます。
- 次回は違うバリエーションでもう少ししっかりとした負荷テストをしてみたいと思います。

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