本文介绍了用SysBench工具测试PolarDB for 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版集群(一主一只读、一standby)的读、写、读写环境场景下的性能。
衡量指标
TPS(Transactions Per Second):即数据库每秒执行的事务数,以COMMIT成功次数为准。
安装SysBench
- 在ECS中执行如下命令安装SysBench。
yum install gcc gcc-c++ autoconf automake make libtool bzr postgresql-devel git postgresql git clone https://github.com/akopytov/sysbench.git ##从Git中下载sysbench cd sysbench ##打开sysbench目录 git checkout 1.0.18 ##切换到sysbench 1.0.18版本 ./autogen.sh ##运行autogen.sh ./configure --prefix=/usr --mandir=/usr/share/man make ##编译 make install
- 执行如下命令配置SysBench client,使内核可以利用所有的CPU核数处理数据包(默认设置为2核),同时减少CPU核数之间的上下文切换。
sudo sh -c 'for x in /sys/class/net/eth0/queues/rx-*; do echo ffffffff>$x/rps_cpus; done' sudo sh -c "echo 32768 > /proc/sys/net/core/rps_sock_flow_entries" sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt" sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-1/rps_flow_cnt"
说明 ffffffff表示使用32个核,请您根据实际配置修改。例如,ECS为8核,则输入ff。
测试方法
说明 以下测试方法以PolarDB PostgreSQL版为例进行说明。
- 连接PolarDB PostgreSQL版集群地址和端口。具体操作请参见申请集群地址和主地址。
- 连接PolarDB PostgreSQL版集群。具体操作请参见连接数据库集群。
- 在ECS上执行如下命令,以在PolarDB PostgreSQL版集群中创建数据库
textdb
为例。psql -h XXX -p XXX -U XXX -W -c 'create database testdb;'
说明 请将本命令和后续步骤命令中的XXX替换为PolarDB PostgreSQL版集群的集群地址、端口号、用户名。具体参数说明如下:参数 说明 -h PolarDB PostgreSQL版集群的主节点地址。 -p PolarDB PostgreSQL版集群的主节点端口。 -U PolarDB PostgreSQL版集群的用户名。 -W 表明强制使用密码登录。 - 使用SysBench测试PolarDB PostgreSQL版的性能。具体参数说明如下:
参数 说明 --pgsql-password PolarDB PostgreSQL版集群的用户密码。 --pgsql-port PolarDB PostgreSQL版集群的主结点端口。 --pgsql-user PolarDB PostgreSQL版集群的用户名。 --pgsql-host PolarDB PostgreSQL版集群的主节点地址。 说明 具体参数请根据您所在数据库地址、端口等进行修改。- 测试PolarDB PostgreSQL版的写场景性能。
## 准备数据 sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_read_only prepare ## 运行 oltp_insert 测试 sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_insert run ## 运行 oltp_update_index 测试 sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_update_index run ## 运行 oltp_update_non_index 测试 sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_update_non_index run ## 运行 oltp_write_only 测试 sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_write_only run
- 使用SysBench测试PolarDB PostgreSQL版的读场景性能。
## 准备数据 sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_read_only prepare ## 运行 oltp_point_select sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_point_select run ## 运行 oltp_read_only sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_read_only run
- 使用SysBench测试PolarDB PostgreSQL版的读写混合场景性能。
## 准备数据 sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_read_only prepare ## 运行 oltp_read_write sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_read_write run
- 测试PolarDB PostgreSQL版的写场景性能。
后续步骤
- PolarDB PostgreSQL版与同类PostgreSQL数据库14版本的性能对比请参见与同类PostgreSQL云原生数据库性能对比。
- PolarDB PostgreSQL版与开源PostgreSQL引擎14版本的性能对比请参见 与开源PostgreSQL性能对比。