TiDB / CockroachDB / YugabyteDB Sysbench Performance Benchmark
Environment
Infra
- Bench Node: 1 vCPU / 1GB / 25GB SSD / 192.168.0.1/24
- DB Node: 2 vCPU / 4GB / 80GB SSD / 192.168.0.2/24
1Gbps Link in 192.168.0.0/24, created on Vultr
Software Version
- TiDB: v4.0
- CockroachDB: v20.2.3
- YugabyteDB: v2.5.0.0
- sysbench: Git #bbee5d5
Benchmark
- 100 tables
- 100000 rows in each table
Setup
TiDB
Setup instruction follow official document
- install
[root@dbnode ~]# curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
[root@dbnode ~]# source .bash_profile
- create cluster
[root@dbnode ~]# tiup playground v4.0.0 --host 192.168.0.2 --db 1 --pd 3 --kv 3 --monitor
CockroachDB
Setup instruction follow official document
- install
[root@dbnode ~]# wget -qO- https://binaries.cockroachdb.com/cockroach-v20.2.3.linux-amd64.tgz | tar xvz
[root@dbnode ~]# cp -i cockroach-v20.2.3.linux-amd64/cockroach /usr/local/bin
- create cluster
[root@dbnode ~]# cockroach start --insecure --store=sb-local1 --listen-addr=0.0.0.0:26257 --http-addr=localhost:8080 --join=localhost:26257,localhost:26258,localhost:26259 --background
[root@dbnode ~]# cockroach start --insecure --store=sb-local2 --listen-addr=0.0.0.0:26258 --http-addr=localhost:8081 --join=localhost:26257,localhost:26258,localhost:26259 --background
[root@dbnode ~]# cockroach start --insecure --store=sb-local3 --listen-addr=0.0.0.0:26259 --http-addr=localhost:8082 --join=localhost:26257,localhost:26258,localhost:26259 --background
[root@dbnode ~]# cockroach init --insecure --host=localhost:26257
YugabyteDB
Setup instruction follow official document
- install
[root@dbnode ~]# wget https://downloads.yugabyte.com/yugabyte-2.5.0.0-linux.tar.gz
[root@dbnode ~]# tar xvfz yugabyte-2.5.0.0-linux.tar.gz && cd yugabyte-2.5.0.0/
[root@dbnode yugabyte-2.5.0.0]# ./bin/post_install.sh
- create 1node cluster
[root@dbnode bin]# ./yugabyted start --data_dir /tmp/sb1 --base_dir /tmp/sbb1 --listen 0.0.0.0
- create 3node cluster
[root@dbnode bin]# ./yugabyted start --data_dir /tmp/sb1 --base_dir /tmp/sbb1 --listen 127.0.0.1
[root@dbnode bin]# ./yugabyted start --data_dir /tmp/sb2 --base_dir /tmp/sbb2 --listen 127.0.0.2 --join 127.0.0.1
[root@dbnode bin]# ./yugabyted start --data_dir /tmp/sb3 --base_dir /tmp/sbb3 --listen 127.0.0.3 --join 127.0.0.1
sysbench
- install
[root@benchnode ~]# apt install sysbench
- run pgsql bench
[root@benchnode ~]# sysbench /usr/share/sysbench/{oltp_test_item}.lua --time 60 --db-driver=pgsql --pgsql-host=192.168.0.2 --pgsql-port={pg_port} --pgsql-user={pg_user} --pgsql-db=postgres --pgsql-password={pg_pass} --tables=10 --table_size=100000 {prepare -> run -> cleanup}
- run mysql bench
[root@benchnode ~]# sysbench /usr/share/sysbench/{oltp_test_item}.lua --db-driver=mysql --mysql-host=192.168.0.2 --mysql-port=4000 --mysql-user=root --mysql-db=mysql --tables=10 --table-size=100000 {prepare -> run -> cleanup}
Result
TiDB
Item | Tx/s | Latency min (ms) | Latency avg (ms) | Latency max (ms) | Latency 95p (ms) |
---|---|---|---|---|---|
oltp_delete | 288.23 | 1.29 | 3.46 | 14.24 | 4.57 |
oltp_insert | 332.18 | 2.33 | 3.00 | 14.49 | 3.43 |
oltp_point_select | 617.75 | 1.33 | 1.62 | 10.32 | 1.82 |
oltp_read_only | 604.51 | 25.57 | 28.09 | 58.20 | 31.94 |
oltp_read_write | 561.81 | 31.45 | 37.34 | 58.22 | 42.61 |
oltp_update_index | 250.57 | 3.14 | 3.99 | 22.76 | 4.82 |
oltp_update_non_index | 258.56 | 3.02 | 3.86 | 36.10 | 4.65 |
oltp_write_only | 487.85 | 11.75 | 14.33 | 44.83 | 18.95 |
select_random_points | 68.99 | 7.05 | 14.48 | 55.92 | 21.11 |
select_random_ranges | 269.18 | 2.19 | 3.71 | 14.47 | 5.00 |
CockroachDB
Item | Tx/s | Latency min (ms) | Latency avg (ms) | Latency max (ms) | Latency 95p (ms) |
---|---|---|---|---|---|
oltp_delete | 617.68 | 1.05 | 1.62 | 25.54 | 1.96 |
oltp_insert | 198.56 | 2.83 | 5.03 | 106.36 | 7.17 |
oltp_point_select | 728.46 | 0.78 | 1.37 | 33.35 | 1.73 |
oltp_read_only | 606.40 | 23.18 | 28.02 | 135.94 | 36.24 |
oltp_read_write | 449.85 | 34.45 | 46.67 | 311.53 | 64.47 |
oltp_update_index | 471.66 | 1.47 | 2.12 | 48.43 | 2.86 |
oltp_update_non_index | 416.49 | 1.73 | 2.40 | 43.75 | 2.91 |
oltp_write_only | 541.03 | 9.71 | 12.93 | 83.90 | 17.95 |
select_random_points | 53.11 | 8.47 | 18.82 | 131.74 | 30.26 |
select_random_ranges | 216.49 | 2.99 | 4.61 | 43.71 | 6.09 |
YugabyteDB (1-Node Cluster)
Item | Tx/s | Latency min (ms) | Latency avg (ms) | Latency max (ms) | Latency 95p (ms) |
---|---|---|---|---|---|
oltp_delete | 411.01 | 1.17 | 2.43 | 18.29 | 3.89 |
oltp_insert | 355.39 | 2.08 | 2.81 | 24.47 | 3.43 |
oltp_point_select | 591.91 | 1.44 | 1.69 | 207.49 | 1.86 |
oltp_read_only | 9.61 | 1664.73 | 1769.76 | 2030.33 | 1938.16 |
oltp_read_write | 11.26 | 1744.68 | 1865.75 | 2054.83 | 2009.23 |
oltp_update_index | 275.13 | 2.75 | 3.63 | 24.27 | 4.10 |
oltp_update_non_index | 346.58 | 2.28 | 2.88 | 26.90 | 3.36 |
oltp_write_only | 603.20 | 9.78 | 11.60 | 32.16 | 14.73 |
select_random_points | 40.44 | 10.28 | 24.72 | 63.21 | 31.94 |
select_random_ranges | 1.95 | 481.83 | 513.71 | 577.10 | 539.71 |
YugabyteDB (3-Node Cluster)
Item | Tx/s | Latency min (ms) | Latency avg (ms) | Latency max (ms) | Latency 95p (ms) |
---|---|---|---|---|---|
oltp_delete | 151.83 | 1.02 | 6.58 | 78.53 | 10.09 |
oltp_insert | 132.92 | 5.21 | 7.52 | 99.84 | 9.56 |
oltp_point_select | 516.29 | 1.47 | 1.93 | 30.76 | 2.61 |
oltp_read_only | 8.79 | 1787.12 | 1934.69 | 2660.52 | 2320.55 |
oltp_read_write | 7.19 | 1927.86 | 2920.22 | 9512.29 | 6713.97 |
oltp_update_index | 93.91 | 6.25 | 10.64 | 416.51 | 17.01 |
oltp_update_non_index | 172.86 | 3.85 | 5.78 | 59.12 | 7.17 |
oltp_write_only | 287.86 | 17.07 | 24.31 | 108.06 | 31.94 |
select_random_points | 41.47 | 8.02 | 24.11 | 79.50 | 31.37 |
select_random_ranges | 1.97 | 474.78 | 508.71 | 554.65 | 530.08 |
Conclusion
- Not sure what happend on YbDB OLTP
- CrDB at max latency will be unstable
- Memory Usage:
- TiDB > YbDB3 > YbDB1 > CrDB
- Table
- C: CrDB = TiDB > YbDB1 > YbDB3
- D: CrDB = TiDB > YbDB1 > YbDB3
- Row
- C: YbDB1 > TiDB > CrDB > YbDB3
- R: CrDB > TiDB > YbDB1 > YbDB3
- U: CrDB > YbDB1 > TiDB > YbDB3
- D: CrDB > YbDB1 > TiDB > YbDB3
Overall
CrDB > TiDB > YbDB