本文介绍了用SysBench工具测试PolarDB PostgreSQL版 14集群的OLTP负载性能的方法,您可以按照本文介绍自行测试对比,快速了解数据库系统的性能。
测试工具
SysBench是一个跨平台且支持多线程的模块化基准测试工具,用于评估系统在运行高负载的数据库时相关核心参数的性能表现。使用SysBench是为了绕过复杂的数据库基准设置,甚至在没有安装数据库的前提下,快速了解数据库系统的性能。
测试环境
测试的ECS和PolarDB PostgreSQL版均在同一地域、同一可用区。
网络类型均为VPC网络。
说明ECS实例和PolarDB PostgreSQL版集群需保证在同一个VPC中。
测试用PolarDB PostgreSQL版集群信息如下:
读场景、写场景以及读写混合场景性能测试使用的是两节点集群(一主一只读),同时有一个Standby节点。
使用的连接串为集群主地址,查看PolarDB PostgreSQL版集群地址请参见申请集群地址和主地址。
测试用ECS实例信息如下:
实例规格为ecs.c5.4xlarge。
实例所使用的镜像为CentOS 7.6 64位。
测试场景
测试PolarDB PostgreSQL版 14集群(一主一只读、一Standby)的读、写、读写环境场景下的性能。
衡量指标
TPS(Transactions Per Second):即数据库每秒执行的事务数,以COMMIT成功次数为准。
安装SysBench
快速安装SysBench的方法如下:
Debian/Ubuntu
sudo apt -y install sysbench
RHEL/CentOS
sudo yum -y install sysbench
源码安装命令:
仅以
RHEL/CentOS
为例,需采用root
权限安装:## 安装相关依赖包 yum -y install make automake libtool pkgconfig libaio-devel git ## 安装MySQL的相关依赖支持 yum -y install mariadb-devel openssl-devel ## 安装PostgreSQL的依赖支持 yum -y install postgresql-devel ## 从Git中下载SysBench git clone https://github.com/akopytov/sysbench.git ## 打开sysbench目录 cd sysbench ## 运行autogen.sh ./autogen.sh ## 进行配置,并且增加PostgreSQL的测试支持 ./configure --with-pgsql ## 构建 make -j ## 安装 make install
通过如下Shell命令校验,返回结果中出现
pgsql option
则表示安装成功。sysbench --help
返回的
pgsql option
如下:说明在低版本sysbench,
pgsql options
中的--pgsql-sslmode
可能不存在,不影响测试,无需关注。pgsql options: --pgsql-host=STRING PostgreSQL server host [localhost] --pgsql-port=N PostgreSQL server port [5432] --pgsql-user=STRING PostgreSQL user [sbtest] --pgsql-password=STRING PostgreSQL password [] --pgsql-db=STRING PostgreSQL database name [sbtest] --pgsql-sslmode=STRING PostgreSQL SSL mode (disable, allow, prefer, require, verify-ca, verify-full) [prefer]
更多系统的二进制安装命令,请参考SysBench的官方文档。
测试方法
测试环境准备
将ECS实例地址添加到PolarDB集群白名单中,详细步骤请参考设置集群白名单。
创建账户,详细操作请参考创建数据库账号。建议创建高权限账户。
在控制台创建测试数据库
testdb
,数据库Owner使用上一步创建的账户,详细步骤请参考创建数据库。获取集群主地址,详细操作请参考查看或申请连接地址。
使用SysBench测试PolarDB PostgreSQL版的性能。
具体参数说明如下:
说明具体参数值请根据您的集群地址、端口等进行修改。
参数
说明
--pgsql-user
PolarDB PostgreSQL版集群的账号名。
--pgsql-password
PolarDB PostgreSQL版集群的账号密码。
--pgsql-host
PolarDB PostgreSQL版集群主地址。
--pgsql-port
PolarDB PostgreSQL版集群主地址端口。
快速测试
在快速测试中,导入8张测试表,每张表为25万行数据,预计数据量为1 GB。
并发数为256,单个场景测试持续时间为5分钟。
数据准备。
## 清理数据 sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_insert cleanup ## 导入数据 sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_insert prepare
不同场景测试。
读写混合场景测试。
## 运行oltp_read_write测试 sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_read_write run
写入场景测试,以下为3个场景,各自执行时间5分钟,总计15分钟。
运行oltp_update_index测试。
sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_update_index run
运行oltp_update_non_index测试。
sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_update_non_index run
运行oltp_write_only测试。
sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_write_only run
读取场景测试,以下为2个场景,各自执行时间5分钟,总计10分钟。
运行oltp_point_select测试。
sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_point_select run
运行oltp_read_only测试。
sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_read_only run
IOBound和CPUBound测试
IOBound测试:确认IO密集型场景下的数据库性能
CPUBound测试:确认CPU密集型场景下的数据库性能。
如下测试数据量均以8核64 GB规格的PolarDB为例:
后续步骤
PolarDB PostgreSQL版与同类PostgreSQL数据库14版本的性能对比请参考与同类PostgreSQL云原生数据库性能对比。
PolarDB PostgreSQL版与开源PostgreSQL引擎14版本的性能对比请参考与开源PostgreSQL性能对比。