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

  1. 在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
  2. 执行如下命令配置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版为例进行说明。
  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
                                      

后续步骤