本文介绍了用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

快速安装SysBench的方法如下:
  • Debian/Ubuntu
    curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
    sudo apt -y install sysbench
  • RHEL/CentOS
    curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
    sudo yum -y install sysbench
说明 更多系统的二进制安装命令,请参考sysbench的官方文档

测试方法

说明 以下测试方法以PolarDB PostgreSQL版为例进行说明。
  1. 连接PolarDB PostgreSQL版集群地址和端口。具体操作请参见申请集群地址和主地址
  2. 连接PolarDB PostgreSQL版集群。具体操作请参见连接数据库集群
  3. 在ECS上执行如下命令,以在PolarDB PostgreSQL版集群中创建数据库textdb为例。
    psql -h XXX -p XXX -U XXX -W -c 'create database testdb;'
    说明 请将本命令和后续步骤命令中的XXX替换为PolarDB PostgreSQL版集群的集群地址、端口号、用户名。
    具体参数说明如下:
    参数说明
    -hPolarDB PostgreSQL版集群的主节点地址。
    -pPolarDB PostgreSQL版集群的主节点端口。
    -UPolarDB PostgreSQL版集群的用户名。
    -W表明强制使用密码登录。
  4. 使用SysBench测试PolarDB PostgreSQL版的性能。
    具体参数说明如下:
    参数说明
    --pgsql-passwordPolarDB PostgreSQL版集群的用户密码。
    --pgsql-portPolarDB PostgreSQL版集群的主结点端口。
    --pgsql-userPolarDB PostgreSQL版集群的用户名。
    --pgsql-hostPolarDB 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
                                      

后续步骤