🤖

YugabyteDB 勉強してみる

に公開

RDBMS、NoSQL の良いところを併せ持った分散データベース。(NewSQL と呼ばれている)

https://speakerdeck.com/oracle4engineer/newsql-landscape?slide=11

Setting up

  • 初期セットアップ 3 台構成
    • RHEL9 を使用。
# 全ノードでそれぞれ実施
wget https://software.yugabyte.com/releases/2024.2.3.1/yugabyte-2024.2.3.1-b3-linux-x86_64.tar.gz
tar xvfz yugabyte-2024.2.3.1-b3-linux-x86_64.tar.gz && cd yugabyte-2024.2.3.1/
./bin/post_install.sh
export PATH=/root/yugabyte-2024.2.3.1/bin:$PATH
echo 'export PATH=/root/yugabyte-2024.2.3.1/bin:$PATH' >> ~/.bash_profile
rm -rf /yugabytedb/disk1 ; mkdir -p /yugabytedb/disk1

TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
AZ=`curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/placement/availability-zone/` 

yb-master \
  --master_addresses y1:7100,y2:7100,y3:7100 \
  --rpc_bind_addresses 0.0.0.0:7100 \
  --fs_data_dirs "/yugabytedb/disk1" \
  --replication_factor=3 \
  --placement_cloud aws \
  --placement_region ap-northeast-1 \
  --placement_zone ${AZ} \
  >& /root/yb-master.out &

yb-tserver \
  --tserver_master_addrs y1:7100,y2:7100,y3:7100 \
  --rpc_bind_addresses 0.0.0.0:9100 \
  --enable_ysql \
  --pgsql_proxy_bind_address 0.0.0.0:5433 \
  --cql_proxy_bind_address 0.0.0.0:9042 \
  --fs_data_dirs "/yugabytedb/disk1" \
  --placement_cloud aws \
  --placement_region ap-northeast-1  \
  --placement_zone ${AZ} \
  >& /root/yb-tserver.out &



Monitoring

LEADER/FOLLOWER の稼働状況

# yb-admin --master_addresses "y1:7100,y2:7100,y3:7100" list_all_masters
Master UUID                      	RPC Host/Port        	State    	Role 	Broadcast Host/Port 
72db74b4d3d341b58d6353891f040bbe 	y1:7100              	ALIVE    	LEADER 	N/A                 
0b7991c9be754604ac87fe8545273b28 	y2:7100              	ALIVE    	FOLLOWER 	N/A                 
70d6787a60b5473db77e89025c002db5 	y3:7100              	ALIVE    	FOLLOWER 	N/A

Scaling

Scaling up

TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
AZ=`curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/placement/availability-zone/` 

yb-tserver \
  --tserver_master_addrs y1:7100,y2:7100,y3:7100 \
  --rpc_bind_addresses 0.0.0.0:9100 \
  --enable_ysql \
  --pgsql_proxy_bind_address 0.0.0.0:5433 \
  --cql_proxy_bind_address 0.0.0.0:9042 \
  --fs_data_dirs "/yugabytedb/disk1" \
  --placement_cloud aws \
  --placement_region ap-northeast-1  \
  --placement_zone ${AZ} \
  >& /root/yb-tserver.out &

### タブレットサーバーが増えている
# yb-admin --master_addresses "y1:7100,y2:7100,y3:7100" list_all_tablet_servers
Tablet Server UUID               RPC Host/Port Heartbeat delay Status   Reads/s  Writes/s Uptime   SST total size  SST uncomp size SST #files      Memory   Broadcast Host/Port 
83b89f22daaa4bcc88a544f91383f86f y4:9100 0.54s           ALIVE    0.00     0.00     172      31.02 MB        417.14 MB       3               86.02 MB N/A
831019a1010a431abb0a7b5f18be882c y3:9100 0.61s           ALIVE    0.00     0.00     5230     25.91 MB        349.97 MB       2               291.86 MB N/A
607efcc9d4ac416f982787608e774fdc y2:9100 0.50s           ALIVE    0.00     0.00     5228     0 B             0 B             0               209.24 MB N/A
e6cd61cc2ecb4770afa195c8ab18961b y1:9100 0.44s           ALIVE    0.00     0.00     5230     25.89 MB        349.71 MB       2               290.36 MB N/A

Replacing

  • 壊れたノードをreplace する方法はこちら。
    • ブラックリストに入れる
    • 自動的にリバランスが走るので完了を待つ。
    • 壊れたノードが乗るサーバーを物理的に削除(YugabyteDB としてではなく EC2 を stop/terminate したり、YugabyteDB を停止したり)
    • 新規に置換するノードを起動する。(IP or DNS 名は壊れたノードと同じだと便利)
    • ブラックリストから除外すると自動的にリバランスされ置換されて復旧したノードへもデータが伝搬される。
      https://docs.yugabyte.com/preview/troubleshoot/cluster/replace_tserver/?_gl=13aqhhl_gcl_au*MTkxNTI1Njg5NS4xNzQ5OTc5NTUx

Backup/Restore

分散データベースのためバックアップリカバリが非常に難しいが、yugabytedb ネイティブのツールで可能なものはいくつかある。

Export/Import

参考: https://docs.yugabyte.com/stable/manage/backup-restore/export-import-data/

  • PostgreSQL の pg_dump のような論理バックアップ形式で、取得する粒度をデータベースやテーブルなど調整できる。
  • ysql_dump/ysql_dumpallで SQL スクリプト形式でダンプ。リストア時は ysqlsh で SQL スクリプトを流し込む。
  • 単一データベースダンプ
~/yugabyte-2024.2.3.1/postgres/bin/ysql_dump -h y1 -d yugabyte > yugabytedb.dump
  • 単一テーブルダンプ
~/yugabyte-2024.2.3.1/postgres/bin/ysql_dump -h y1 -d yugabyte -t test1 > yugabytedb_tbl.dump
  • 複数テーブルダンプ
~/yugabyte-2024.2.3.1/postgres/bin/ysql_dump -h y1 -d yugabyte -t test1 -t test2 > yugabytedb_tbl.dump
  • インポート
ysqlsh -h y1 -f yugabytedb_tbl.dump

Distributed Snapshot

参考: https://docs.yugabyte.com/stable/manage/backup-restore/snapshot-ysql/

-- table 
drop table test1;
CREATE TABLE test1 (id int);
insert into test1 SELECT id FROM generate_series(1, 1000) id;

-- Snapshot
yb-admin --master_addresses "y1:7100,y2:7100,y3:7100" create_database_snapshot ysql.yugabyte
yb-admin --master_addresses "y1:7100,y2:7100,y3:7100" list_snapshots

-- Deleting Data
delete from test1;
=# select count(*) from test1;
 count 
-------
     0
(1 row)

-- Restore Snapshot - Restoration UUID が RESTORED になっていれば完了
yb-admin --master_addresses "y1:7100,y2:7100,y3:7100" restore_snapshot 0c79dc7d-2b5e-42a9-a9de-e9b8aee79ea2
yb-admin --master_addresses "y1:7100,y2:7100,y3:7100" list_snapshots

=# select count(*) from test1;
 count 
-------
  1000
(1 row)

Point in Time Recovery

指定時点へのデータベース全体のリカバリ。公式の資料をみる限り、Distributed Snapshot でスナップショットリストアした後に Flashback 機能で rewind することで指定時間まで戻るという仕組み。


(出典:https://docs.yugabyte.com/stable/manage/backup-restore/point-in-time-recovery/)

Flashback できる範囲の期間は Global 設定のtimestamp_history_retention_interval_sec、および、PITR が有効化された時の Distributed Snapshot 間隔の最大値が適用される。 (参考: https://docs.yugabyte.com/stable/manage/backup-restore/point-in-time-recovery/#configuration-details )

-- table 
drop table test1;
CREATE TABLE test1 (t timestamp);
insert into test1 values (now());
\watch 1

## Scheduling Snapshot
yb-admin -master_addresses "y1:7100,y2:7100,y3:7100" create_snapshot_schedule 5 1440 ysql.yugabyte

yb-admin -master_addresses "y1:7100,y2:7100,y3:7100" list_snapshot_schedules
{
    "schedules": [
        {
            "id": "e5ac4ea3-f8f4-495f-807d-9f2b01d7e07b",
            "options": {
                "filter": "ysql.yugabyte",
                "interval": "5 min",
                "retention": "1440 min"
            },
            "snapshots": [
                {
                    "id": "c0e101ab-a9e2-43da-bd18-b61a986d4df5",
                    "snapshot_time": "2025-06-20 15:07:03.200626"
                },
                {
                    "id": "d1727506-7377-4919-b857-7feda05bbed3",
                    "snapshot_time": "2025-06-20 15:12:08.218287",
                    "previous_snapshot_time": "2025-06-20 15:07:03.200626"
                }
            ]
        }
    ]
}

## PITR to 2025-06-20 15:10
yb-admin -master_addresses "y1:7100,y2:7100,y3:7100" restore_snapshot_schedule e5ac4ea3-f8f4-495f-807d-9f2b01d7e07b "2025-06-20 15:10:00"

yugabyte=# select max(t) from test1;
            max             
----------------------------
 2025-06-20 15:09:59.040964

Performance Benchmark

ysql_bench

-- table 
ysqlsh -h y1 -c 'drop table test1;'
ysqlsh -h y1 -c 'create table test1 (id varchar primary key, col1 text,col2 text);'
ysqlsh -h y1 -c 'create extension "uuid-ossp";'

# test dml
cat << 'EOF' > /tmp/oltp.sql 
insert into test1 values(uuid_generate_v4(),rpad('x',1000,'a'),rpad('x',1000,'a'));
EOF

# ysql_bench
for i in `seq 3`;do
~/yugabyte-2024.2.3.1/postgres/bin/ysql_bench -h y${i} -c 30 -j 30 -T 30 -f /tmp/oltp.sql &
done
time wait

YCSB

https://docs.yugabyte.com/preview/benchmark/ycsb-jdbc/

docker run -itd --privileged --name ycsb --hostname ycsb --restart=always python:2.7 /bin/bash
#docker run -it --rm python:2.7 /bin/bash
docker container exec -it ycsb /bin/bash

cat << 'EOF' > /etc/apt/sources.list
deb http://snapshot.debian.org/archive/debian/20200414T000000Z buster main
deb http://snapshot.debian.org/archive/debian-security/20200414T000000Z buster/updates main
deb http://snapshot.debian.org/archive/debian/20200414T000000Z buster-updates main
EOF

cd $HOME
apt-get -y update
apt-get -y install openjdk-11-jdk vim
wget https://software.yugabyte.com/releases/2024.2.3.1/yugabyte-2024.2.3.1-b3-linux-x86_64.tar.gz
tar xvfz yugabyte-2024.2.3.1-b3-linux-x86_64.tar.gz

export PATH=/root/yugabyte-2024.2.3.1/bin:$PATH
echo 'export PATH=/root/yugabyte-2024.2.3.1/bin:$PATH' >> ~/.bashrc
wget https://github.com/yugabyte/YCSB/releases/download/1.0/ycsb.tar.gz
tar -xzf ycsb.tar.gz
rm -f yugabyte*.tar.gz ycsb*tar.gz
cd ~/YCSB

cat << 'EOF' > db.properties
db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://y1:5433/ycsb;jdbc:postgresql://y2:5433/ycsb;jdbc:postgresql://y3:5433/ycsb;
db.user=yugabyte
db.passwd=
EOF

sed -i 's/requestdistribution=zipfian/requestdistribution=uniform/g' /YCSB/workloads/workload?

ysqlsh -h y1 -c 'DROP DATABASE ycsb;'
ysqlsh -h y1 -c 'CREATE DATABASE ycsb;'
ysqlsh -h y1 -d ycsb -c "CREATE TABLE usertable (YCSB_KEY TEXT,FIELD0 TEXT, FIELD1 TEXT, FIELD2 TEXT, FIELD3 TEXT,FIELD4 TEXT, FIELD5 TEXT, FIELD6 TEXT, FIELD7 TEXT,FIELD8 TEXT, FIELD9 TEXT,PRIMARY KEY (YCSB_KEY ASC)) SPLIT AT VALUES (('user10'),('user14'),('user18'),('user22'),('user26'),('user30'),('user34'),('user38'),('user42'),('user46'),('user50'),('user54'),('user58'),('user62'),('user66'),('user70'),('user74'),('user78'),('user82'),('user86'),('user90'),('user94'),('user98'));"

# Loading data
./bin/ycsb load jdbc -s        \
      -P db.properties           \
      -P workloads/workloada    \
      -p recordcount=1000000     \
      -p operationcount=10000000 \
      -p threadcount=32

# Workload A (Read:Update=50:50)
./bin/ycsb run jdbc -s         \
      -P db.properties           \
      -P workloads/workloada     \
      -p recordcount=1000000     \
      -p operationcount=10000000 \
      -p threadcount=256

# Workload B (Read:Update=95:5)
./bin/ycsb run jdbc -s         \
      -P db.properties           \
      -P workloads/workloadb     \
      -p recordcount=1000000     \
      -p operationcount=10000000 \
      -p threadcount=256

# Workload C (Read=100)
./bin/ycsb run jdbc -s         \
      -P db.properties           \
      -P workloads/workloadc    \
      -p recordcount=1000000     \
      -p operationcount=10000000 \
      -p threadcount=256

# Workload F (Read-modify-write)
./bin/ycsb run jdbc -s         \
      -P db.properties           \
      -P workloads/workloadf    \
      -p recordcount=1000000     \
      -p operationcount=10000000 \
      -p threadcount=256
-- PostgreSQL
DROP TABLE usertable;
CREATE TABLE usertable (
	YCSB_KEY VARCHAR(255) PRIMARY KEY,
	FIELD0 TEXT, FIELD1 TEXT,
	FIELD2 TEXT, FIELD3 TEXT,
	FIELD4 TEXT, FIELD5 TEXT,
	FIELD6 TEXT, FIELD7 TEXT,
	FIELD8 TEXT, FIELD9 TEXT
);

-- Oracle
DROP TABLE usertable;
CREATE TABLE usertable (
	YCSB_KEY VARCHAR(255) PRIMARY KEY,
	FIELD0 VARCHAR(4000), FIELD1 VARCHAR(4000),
	FIELD2 VARCHAR(4000), FIELD3 VARCHAR(4000),
	FIELD4 VARCHAR(4000), FIELD5 VARCHAR(4000),
	FIELD6 VARCHAR(4000), FIELD7 VARCHAR(4000),
	FIELD8 VARCHAR(4000), FIELD9 VARCHAR(4000)
);

DROP TABLE usertable;
CREATE TABLE usertable (
	YCSB_KEY VARCHAR(255) PRIMARY KEY,
	FIELD0 CLOB, FIELD1 CLOB,
	FIELD2 CLOB, FIELD3 CLOB,
	FIELD4 CLOB, FIELD5 CLOB,
	FIELD6 CLOB, FIELD7 CLOB,
	FIELD8 CLOB, FIELD9 CLOB
);
  • db.properties
# PostgreSQL
db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://pg:5432/postgres;
db.user=postgres
db.passwd=***

# Oracle (jdbc ドライバーを -cp オプションでクラスパス通す必要あり)
db.driver= oracle.jdbc.driver.OracleDriver
db.url=jdbc:oracle:thin:@ora:1521/ORCL;
db.user=ADMIN
db.passwd=***
  • YCSB の Workload として用意されているテンプレ(A-F) の内容は https://github.com/brianfrankcooper/YCSB/wiki/Core-Workloads 参照

    • デフォルトだと workloads ディレクトリ以下の各 workload ファイル内で requestdistribution=zipfian で特定キーがホットになる傾向があるので行ロックが多発して遅延する可能性はある。均等アクセスにして行ロック競合の可能性を減らしたければ uniform に設定する。
  • ワークロードの比較検証結果

    • 可用性を担保できる構成で試験。
    • 単純な読み取り系は PostgreSQL がかなり高い。
    • Insert(Load) は YugabyteDB の方がスループットは出ている。
    • Update はクライアントの AZ と RDS の AZ が同じか異なるかで YugabyteDB の方が優位だったりすることもある。
    • 可用性の観点では、RDS はプライマリが障害起きるとフェイルオーバー形でダウンタイムが起きるが YugabyteDB の方は少なくとも 3 台構成(replication_factor=3) なら特にほぼ影響ない点もある。
    • どちらが良いはやはり要件次第。
YugabyteDB m6i.4xlarge x 3 (全台別 AZ)
  • Loading data
[OVERALL], RunTime(ms), 114609
[OVERALL], Throughput(ops/sec), 8725.318255983388
[TOTAL_GCS_G1_Young_Generation], Count, 35
[TOTAL_GC_TIME_G1_Young_Generation], Time(ms), 84
[TOTAL_GC_TIME_%_G1_Young_Generation], Time(%), 0.07329267335026045
[TOTAL_GCS_G1_Old_Generation], Count, 0
[TOTAL_GC_TIME_G1_Old_Generation], Time(ms), 0
[TOTAL_GC_TIME_%_G1_Old_Generation], Time(%), 0.0
[TOTAL_GCs], Count, 35
[TOTAL_GC_TIME], Time(ms), 84
[TOTAL_GC_TIME_%], Time(%), 0.07329267335026045
[CLEANUP], Operations, 32
[CLEANUP], AverageLatency(us), 113.0625
[CLEANUP], MinLatency(us), 82
[CLEANUP], MaxLatency(us), 268
[CLEANUP], 95thPercentileLatency(us), 134
[CLEANUP], 99thPercentileLatency(us), 268
[INSERT], Operations, 1000000
[INSERT], AverageLatency(us), 3543.045695
[INSERT], MinLatency(us), 1848
[INSERT], MaxLatency(us), 36895
[INSERT], 95thPercentileLatency(us), 5899
[INSERT], 99thPercentileLatency(us), 6539
[INSERT], Return=OK, 1000000
  • Workload A
[OVERALL], RunTime(ms), 148117
[OVERALL], Throughput(ops/sec), 67514.19485946921
[TOTAL_GCS_G1_Young_Generation], Count, 65
[TOTAL_GC_TIME_G1_Young_Generation], Time(ms), 345
[TOTAL_GC_TIME_%_G1_Young_Generation], Time(%), 0.23292397226516875
[TOTAL_GCS_G1_Old_Generation], Count, 0
[TOTAL_GC_TIME_G1_Old_Generation], Time(ms), 0
[TOTAL_GC_TIME_%_G1_Old_Generation], Time(%), 0.0
[TOTAL_GCs], Count, 65
[TOTAL_GC_TIME], Time(ms), 345
[TOTAL_GC_TIME_%], Time(%), 0.23292397226516875
[READ], Operations, 5002064
[READ], AverageLatency(us), 2604.1193923148526
[READ], MinLatency(us), 385
[READ], MaxLatency(us), 509183
[READ], 95thPercentileLatency(us), 4107
[READ], 99thPercentileLatency(us), 4563
[READ], Return=OK, 5002064
[CLEANUP], Operations, 256
[CLEANUP], AverageLatency(us), 83.03515625
[CLEANUP], MinLatency(us), 41
[CLEANUP], MaxLatency(us), 342
[CLEANUP], 95thPercentileLatency(us), 140
[CLEANUP], 99thPercentileLatency(us), 173
[UPDATE], Operations, 4997936
[UPDATE], AverageLatency(us), 4740.13784750345
[UPDATE], MinLatency(us), 1946
[UPDATE], MaxLatency(us), 488191
[UPDATE], 95thPercentileLatency(us), 7183
[UPDATE], 99thPercentileLatency(us), 7963
[UPDATE], Return=OK, 4997936
  • Workload C
[OVERALL], RunTime(ms), 107729
[OVERALL], Throughput(ops/sec), 92825.51587780449
[TOTAL_GCS_G1_Young_Generation], Count, 69
[TOTAL_GC_TIME_G1_Young_Generation], Time(ms), 157
[TOTAL_GC_TIME_%_G1_Young_Generation], Time(%), 0.14573605992815306
[TOTAL_GCS_G1_Old_Generation], Count, 0
[TOTAL_GC_TIME_G1_Old_Generation], Time(ms), 0
[TOTAL_GC_TIME_%_G1_Old_Generation], Time(%), 0.0
[TOTAL_GCs], Count, 69
[TOTAL_GC_TIME], Time(ms), 157
[TOTAL_GC_TIME_%], Time(%), 0.14573605992815306
[READ], Operations, 10000000
[READ], AverageLatency(us), 2641.2507754
[READ], MinLatency(us), 346
[READ], MaxLatency(us), 553471
[READ], 95thPercentileLatency(us), 4203
[READ], 99thPercentileLatency(us), 4787
[READ], Return=OK, 10000000
[CLEANUP], Operations, 256
[CLEANUP], AverageLatency(us), 89.90625
[CLEANUP], MinLatency(us), 43
[CLEANUP], MaxLatency(us), 359
[CLEANUP], 95thPercentileLatency(us), 152
[CLEANUP], 99thPercentileLatency(us), 218
  • Workload F
[OVERALL], RunTime(ms), 207792
[OVERALL], Throughput(ops/sec), 48125.048125048124
[TOTAL_GCS_G1_Young_Generation], Count, 98
[TOTAL_GC_TIME_G1_Young_Generation], Time(ms), 522
[TOTAL_GC_TIME_%_G1_Young_Generation], Time(%), 0.2512127512127512
[TOTAL_GCS_G1_Old_Generation], Count, 0
[TOTAL_GC_TIME_G1_Old_Generation], Time(ms), 0
[TOTAL_GC_TIME_%_G1_Old_Generation], Time(%), 0.0
[TOTAL_GCs], Count, 98
[TOTAL_GC_TIME], Time(ms), 522
[TOTAL_GC_TIME_%], Time(%), 0.2512127512127512
[READ], Operations, 10000000
[READ], AverageLatency(us), 2677.6810169
[READ], MinLatency(us), 361
[READ], MaxLatency(us), 548863
[READ], 95thPercentileLatency(us), 4227
[READ], 99thPercentileLatency(us), 4855
[READ], Return=OK, 10000000
[READ-MODIFY-WRITE], Operations, 5000885
[READ-MODIFY-WRITE], AverageLatency(us), 7626.607036954459
[READ-MODIFY-WRITE], MinLatency(us), 2332
[READ-MODIFY-WRITE], MaxLatency(us), 6213631
[READ-MODIFY-WRITE], 95thPercentileLatency(us), 11599
[READ-MODIFY-WRITE], 99thPercentileLatency(us), 12767
[CLEANUP], Operations, 256
[CLEANUP], AverageLatency(us), 97.06640625
[CLEANUP], MinLatency(us), 43
[CLEANUP], MaxLatency(us), 395
[CLEANUP], 95thPercentileLatency(us), 145
[CLEANUP], 99thPercentileLatency(us), 188
[UPDATE], Operations, 5000885
[UPDATE], AverageLatency(us), 4947.9142153838775
[UPDATE], MinLatency(us), 1910
[UPDATE], MaxLatency(us), 6213631
[UPDATE], 95thPercentileLatency(us), 7503
[UPDATE], 99thPercentileLatency(us), 8439
[UPDATE], Return=OK, 5000885
RDS PostgreSQL m6i.4xlarge (Multi AZ)

[1] クライアントと RDS プライマリインスタンスの AZ は同一の場合

  • Loading data
[OVERALL], RunTime(ms), 165557
[OVERALL], Throughput(ops/sec), 6040.215756506823
[TOTAL_GCS_G1_Young_Generation], Count, 47
[TOTAL_GC_TIME_G1_Young_Generation], Time(ms), 89
[TOTAL_GC_TIME_%_G1_Young_Generation], Time(%), 0.05375792023291072
[TOTAL_GCS_G1_Old_Generation], Count, 0
[TOTAL_GC_TIME_G1_Old_Generation], Time(ms), 0
[TOTAL_GC_TIME_%_G1_Old_Generation], Time(%), 0.0
[TOTAL_GCs], Count, 47
[TOTAL_GC_TIME], Time(ms), 89
[TOTAL_GC_TIME_%], Time(%), 0.05375792023291072
[CLEANUP], Operations, 32
[CLEANUP], AverageLatency(us), 1023.9375
[CLEANUP], MinLatency(us), 80
[CLEANUP], MaxLatency(us), 2315
[CLEANUP], 95thPercentileLatency(us), 2020
[CLEANUP], 99thPercentileLatency(us), 2315
[INSERT], Operations, 1000000
[INSERT], AverageLatency(us), 5272.615761
[INSERT], MinLatency(us), 2756
[INSERT], MaxLatency(us), 48095
[INSERT], 95thPercentileLatency(us), 5395
[INSERT], 99thPercentileLatency(us), 6919
[INSERT], Return=OK, 1000000
  • Workload A
[OVERALL], RunTime(ms), 122901
[OVERALL], Throughput(ops/sec), 81366.30295929244
[TOTAL_GCS_G1_Young_Generation], Count, 180
[TOTAL_GC_TIME_G1_Young_Generation], Time(ms), 437
[TOTAL_GC_TIME_%_G1_Young_Generation], Time(%), 0.35557074393210797
[TOTAL_GCS_G1_Old_Generation], Count, 0
[TOTAL_GC_TIME_G1_Old_Generation], Time(ms), 0
[TOTAL_GC_TIME_%_G1_Old_Generation], Time(%), 0.0
[TOTAL_GCs], Count, 180
[TOTAL_GC_TIME], Time(ms), 437
[TOTAL_GC_TIME_%], Time(%), 0.35557074393210797
[READ], Operations, 5000252
[READ], AverageLatency(us), 338.9415375465077
[READ], MinLatency(us), 108
[READ], MaxLatency(us), 460287
[READ], 95thPercentileLatency(us), 729
[READ], 99thPercentileLatency(us), 1376
[READ], Return=OK, 5000252
[CLEANUP], Operations, 256
[CLEANUP], AverageLatency(us), 155.2890625
[CLEANUP], MinLatency(us), 66
[CLEANUP], MaxLatency(us), 1265
[CLEANUP], 95thPercentileLatency(us), 297
[CLEANUP], 99thPercentileLatency(us), 499
[UPDATE], Operations, 4999748
[UPDATE], AverageLatency(us), 5771.240142503182
[UPDATE], MinLatency(us), 2546
[UPDATE], MaxLatency(us), 549887
[UPDATE], 95thPercentileLatency(us), 6687
[UPDATE], 99thPercentileLatency(us), 10007
[UPDATE], Return=OK, 4999748
  • Workload C
[OVERALL], RunTime(ms), 46196
[OVERALL], Throughput(ops/sec), 216468.95835137242
[TOTAL_GCS_G1_Young_Generation], Count, 176
[TOTAL_GC_TIME_G1_Young_Generation], Time(ms), 316
[TOTAL_GC_TIME_%_G1_Young_Generation], Time(%), 0.6840419083903369
[TOTAL_GCS_G1_Old_Generation], Count, 0
[TOTAL_GC_TIME_G1_Old_Generation], Time(ms), 0
[TOTAL_GC_TIME_%_G1_Old_Generation], Time(%), 0.0
[TOTAL_GCs], Count, 176
[TOTAL_GC_TIME], Time(ms), 316
[TOTAL_GC_TIME_%], Time(%), 0.6840419083903369
[READ], Operations, 10000000
[READ], AverageLatency(us), 1042.9882652
[READ], MinLatency(us), 115
[READ], MaxLatency(us), 858623
[READ], 95thPercentileLatency(us), 1828
[READ], 99thPercentileLatency(us), 3859
[READ], Return=OK, 10000000
[CLEANUP], Operations, 256
[CLEANUP], AverageLatency(us), 580.50390625
[CLEANUP], MinLatency(us), 74
[CLEANUP], MaxLatency(us), 55807
[CLEANUP], 95thPercentileLatency(us), 995
[CLEANUP], 99thPercentileLatency(us), 2261
  • Workload F
[OVERALL], RunTime(ms), 126621
[OVERALL], Throughput(ops/sec), 78975.84129014934
[TOTAL_GCS_G1_Young_Generation], Count, 287
[TOTAL_GC_TIME_G1_Young_Generation], Time(ms), 640
[TOTAL_GC_TIME_%_G1_Young_Generation], Time(%), 0.5054453842569558
[TOTAL_GCS_G1_Old_Generation], Count, 0
[TOTAL_GC_TIME_G1_Old_Generation], Time(ms), 0
[TOTAL_GC_TIME_%_G1_Old_Generation], Time(%), 0.0
[TOTAL_GCs], Count, 287
[TOTAL_GC_TIME], Time(ms), 640
[TOTAL_GC_TIME_%], Time(%), 0.5054453842569558
[READ], Operations, 10000000
[READ], AverageLatency(us), 398.2692275
[READ], MinLatency(us), 109
[READ], MaxLatency(us), 418047
[READ], 95thPercentileLatency(us), 943
[READ], 99thPercentileLatency(us), 1805
[READ], Return=OK, 10000000
[READ-MODIFY-WRITE], Operations, 5000963
[READ-MODIFY-WRITE], AverageLatency(us), 5788.369379657478
[READ-MODIFY-WRITE], MinLatency(us), 2670
[READ-MODIFY-WRITE], MaxLatency(us), 436223
[READ-MODIFY-WRITE], 95thPercentileLatency(us), 7275
[READ-MODIFY-WRITE], 99thPercentileLatency(us), 11087
[CLEANUP], Operations, 256
[CLEANUP], AverageLatency(us), 180.58984375
[CLEANUP], MinLatency(us), 75
[CLEANUP], MaxLatency(us), 1045
[CLEANUP], 95thPercentileLatency(us), 351
[CLEANUP], 99thPercentileLatency(us), 503
[UPDATE], Operations, 5000963
[UPDATE], AverageLatency(us), 5382.19734699097
[UPDATE], MinLatency(us), 2548
[UPDATE], MaxLatency(us), 339455
[UPDATE], 95thPercentileLatency(us), 6627
[UPDATE], 99thPercentileLatency(us), 9903
[UPDATE], Return=OK, 5000963

[2] クライアントと RDS プライマリインスタンスの AZ は別の場合

  • Loading data
[OVERALL], RunTime(ms), 174090
[OVERALL], Throughput(ops/sec), 5744.155321959905
[TOTAL_GCS_G1_Young_Generation], Count, 47
[TOTAL_GC_TIME_G1_Young_Generation], Time(ms), 87
[TOTAL_GC_TIME_%_G1_Young_Generation], Time(%), 0.049974151301051185
[TOTAL_GCS_G1_Old_Generation], Count, 0
[TOTAL_GC_TIME_G1_Old_Generation], Time(ms), 0
[TOTAL_GC_TIME_%_G1_Old_Generation], Time(%), 0.0
[TOTAL_GCs], Count, 47
[TOTAL_GC_TIME], Time(ms), 87
[TOTAL_GC_TIME_%], Time(%), 0.049974151301051185
[CLEANUP], Operations, 32
[CLEANUP], AverageLatency(us), 221.25
[CLEANUP], MinLatency(us), 82
[CLEANUP], MaxLatency(us), 1116
[CLEANUP], 95thPercentileLatency(us), 1092
[CLEANUP], 99thPercentileLatency(us), 1116
[INSERT], Operations, 1000000
[INSERT], AverageLatency(us), 5537.538887
[INSERT], MinLatency(us), 4028
[INSERT], MaxLatency(us), 52319
[INSERT], 95thPercentileLatency(us), 5675
[INSERT], 99thPercentileLatency(us), 7255
[INSERT], Return=OK, 1000000
  • Workload A
[OVERALL], RunTime(ms), 176086
[OVERALL], Throughput(ops/sec), 56790.4319480254
[TOTAL_GCS_G1_Young_Generation], Count, 179
[TOTAL_GC_TIME_G1_Young_Generation], Time(ms), 415
[TOTAL_GC_TIME_%_G1_Young_Generation], Time(%), 0.2356802925843054
[TOTAL_GCS_G1_Old_Generation], Count, 0
[TOTAL_GC_TIME_G1_Old_Generation], Time(ms), 0
[TOTAL_GC_TIME_%_G1_Old_Generation], Time(%), 0.0
[TOTAL_GCs], Count, 179
[TOTAL_GC_TIME], Time(ms), 415
[TOTAL_GC_TIME_%], Time(%), 0.2356802925843054
[READ], Operations, 5000755
[READ], AverageLatency(us), 1712.2949112683984
[READ], MinLatency(us), 1533
[READ], MaxLatency(us), 156927
[READ], 95thPercentileLatency(us), 1847
[READ], 99thPercentileLatency(us), 2185
[READ], Return=OK, 5000755
[CLEANUP], Operations, 256
[CLEANUP], AverageLatency(us), 145.4921875
[CLEANUP], MinLatency(us), 69
[CLEANUP], MaxLatency(us), 1361
[CLEANUP], 95thPercentileLatency(us), 244
[CLEANUP], 99thPercentileLatency(us), 330
[UPDATE], Operations, 4999245
[UPDATE], AverageLatency(us), 7040.800924139545
[UPDATE], MinLatency(us), 4120
[UPDATE], MaxLatency(us), 247295
[UPDATE], 95thPercentileLatency(us), 11055
[UPDATE], 99thPercentileLatency(us), 18175
[UPDATE], Return=OK, 4999245
  • Workload C
[OVERALL], RunTime(ms), 61643
[OVERALL], Throughput(ops/sec), 162224.42126437713
[TOTAL_GCS_G1_Young_Generation], Count, 152
[TOTAL_GC_TIME_G1_Young_Generation], Time(ms), 534
[TOTAL_GC_TIME_%_G1_Young_Generation], Time(%), 0.8662784095517739
[TOTAL_GCS_G1_Old_Generation], Count, 0
[TOTAL_GC_TIME_G1_Old_Generation], Time(ms), 0
[TOTAL_GC_TIME_%_G1_Old_Generation], Time(%), 0.0
[TOTAL_GCs], Count, 152
[TOTAL_GC_TIME], Time(ms), 534
[TOTAL_GC_TIME_%], Time(%), 0.8662784095517739
[READ], Operations, 10000000
[READ], AverageLatency(us), 2519.804044
[READ], MinLatency(us), 1535
[READ], MaxLatency(us), 1247231
[READ], 95thPercentileLatency(us), 5023
[READ], 99thPercentileLatency(us), 8903
[READ], Return=OK, 10000000
[CLEANUP], Operations, 512
[CLEANUP], AverageLatency(us), 186.17578125
[CLEANUP], MinLatency(us), 58
[CLEANUP], MaxLatency(us), 2725
[CLEANUP], 95thPercentileLatency(us), 345
[CLEANUP], 99thPercentileLatency(us), 946
  • Workload F

[OVERALL], RunTime(ms), 207038
[OVERALL], Throughput(ops/sec), 48300.31202001565
[TOTAL_GCS_G1_Young_Generation], Count, 277
[TOTAL_GC_TIME_G1_Young_Generation], Time(ms), 669
[TOTAL_GC_TIME_%_G1_Young_Generation], Time(%), 0.3231290874139047
[TOTAL_GCS_G1_Old_Generation], Count, 0
[TOTAL_GC_TIME_G1_Old_Generation], Time(ms), 0
[TOTAL_GC_TIME_%_G1_Old_Generation], Time(%), 0.0
[TOTAL_GCs], Count, 277
[TOTAL_GC_TIME], Time(ms), 669
[TOTAL_GC_TIME_%], Time(%), 0.3231290874139047
[READ], Operations, 10000000
[READ], AverageLatency(us), 1712.1369782
[READ], MinLatency(us), 1533
[READ], MaxLatency(us), 187263
[READ], 95thPercentileLatency(us), 1828
[READ], 99thPercentileLatency(us), 2051
[READ], Return=OK, 10000000
[READ-MODIFY-WRITE], Operations, 5001673
[READ-MODIFY-WRITE], AverageLatency(us), 8488.875395892534
[READ-MODIFY-WRITE], MinLatency(us), 5724
[READ-MODIFY-WRITE], MaxLatency(us), 423679
[READ-MODIFY-WRITE], 95thPercentileLatency(us), 9991
[READ-MODIFY-WRITE], 99thPercentileLatency(us), 12815
[CLEANUP], Operations, 256
[CLEANUP], AverageLatency(us), 159.48046875
[CLEANUP], MinLatency(us), 74
[CLEANUP], MaxLatency(us), 1116
[CLEANUP], 95thPercentileLatency(us), 261
[CLEANUP], 99thPercentileLatency(us), 354
[UPDATE], Operations, 5001673
[UPDATE], AverageLatency(us), 6772.141937107844
[UPDATE], MinLatency(us), 4072
[UPDATE], MaxLatency(us), 259839
[UPDATE], 95thPercentileLatency(us), 8191
[UPDATE], 99thPercentileLatency(us), 10879
[UPDATE], Return=OK, 5001673

Discussion