性能测试方法(OLTP)

本文介绍了用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的官方文档

测试方法

测试环境准备

  1. 将ECS实例地址添加到PolarDB集群白名单中,详细步骤请参考设置集群白名单

  2. 创建账户,详细操作请参考创建数据库账号。建议创建高权限账户。

  3. 在控制台创建测试数据库testdb数据库Owner使用上一步创建的账户,详细步骤请参考创建数据库

  4. 获取集群主地址,详细操作请参考查看或申请连接地址

  5. 使用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分钟。

  1. 数据准备。

    ## 清理数据
    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
  2. 不同场景测试。

    • 读写混合场景测试。

      ## 运行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为例:

  • IOBound测试通常要求测试数据量为buffer pool的两倍,相关SysBench参数需修改为如下配置(其余参数与快速测试中场景测试语句一致):

    SysBench参数

    含义

    --tables

    表数量

    8

    --table-size

    表行数

    64000000

  • CPUBound测试通常要求测试数据量为buffer pool的一半,相关SysBench参数需修改为如下配置(其余参数与快速测试中场景测试语句一致):

    SysBench参数

    含义

    --tables

    表数量

    8

    --table-size

    表行数

    12000000

后续步骤