暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

BenchMarkSQL 5.0测试PostgreSQL

北重楼 2021-05-24
3000
  • 简介

BenchmarkSQL是一款经典的开源数据库测试工具,内嵌了TPCC测试脚本,可以对PostgreSQL、Oracle以及Firebird等数据库进行测试.。

TPC-C 于 1992 年 7 月 23 日认可为新的基准测试。TPC(Transaction Processing Performance Council,事务处理性能委员会)-C是衡量联机事务处理(OLTP,Online TransactionProcessing)系统的工业标准,是行业中公认的权威和最为复杂的在线事务处理基准测试。它通过模拟仓库和订单管理系统,测试广泛的数据库功能,包括查询、更新和  mini-batch事务(队列式小批量事务)。TPC-C基准测试针对一种模拟订单录入与销售环境测量每分钟事务(tpmC-transactions per minute)吞吐量。

  • 测试模型

测试用到的模型是一个大型的批发销售公司,在地理分布的多个区域有业务,并且使用仓库管理。当业务扩展的时候,公司将添加新的仓库。每个仓库负责十个区域的供货,每个区域 3000 个客户服务,每个仓库维护 100000 种商品的库存纪录。

TPC-C 标准测试模拟了 5 种事务处理,通过这些事务处理来模拟真实的用户操作,事务分别为新订单(New-Order)、支付操作(Payment)、订单状态查询(Order-Status)、发货(Delivery)、库存状态查询(Stock-Level)。下面将对其执行的事务内容及特点进行详细介绍.

1.新订单(New-Order)

事务内容:对于任意一个客户端,从固定的仓库随机选取 5-15  件商品,创建新订单.其中 1%的订单要由假想的用户操作失败而回滚。

主要特点:中量级、读写频繁、要求响应快.

2.支付操作(Payment)

事务内容:对于任意一个客户端,从固定的仓库随机选取一个辖区及其内用户,采用随机的金额支付一笔订单,并作相应历史记录。

主要特点:轻量级,读写频繁,要求响应快

3.订单状态查询(Order-Status)

事务内容:对于任意一个客户端,从固定的仓库随机选取一个辖区及其内用户,读取其最后一条订单,显示订单内每件商品的状态。

主要特点:中量级,只读频率低,要求响应快

4.发货(Delivery)

事务内容:对于任意一个客户端,随机选取一个发货包,更新被处理订单的用户余额,并把该订单从新订单中删除。

主要特点:1-10 个批量,读写频率低,较宽松的响应时间

5.库存状态查询(Stock-Level)

事物内容:对于任意一个客户端,从固定的仓库和辖区随机选取最后 20 条订单,查看订单中所有的货物的库存,计算并显示所有库存低于随机生成域值的商品数量。

主要特点:重量级,只读频率低,较宽松的响应时间

  • 演示环境
    PostgreSQL:13.0
    OS:CentOS 8
    openjdk version "1.8.0_292"
    ant:1.10.5
    benchmarksql:5.0
    复制
    • 获取版本

    访问官网获取最新版本benchmarksql-5.0.zip

      https://sourceforge.net/projects/benchmarksql/
      复制
      • 编译
        unzip benchmarksql-5.0.zip
        ant
        复制
        • 配置参数

        进入run目录,配置如下参数

        vi props.pg

          db=postgres
          driver=org.postgresql.Driver
          conn=jdbc:postgresql://localhost:5432/postgres
          user=benchmarksql
          password=PWbmsql

          warehouses=1
          loadWorkers=4

          terminals=1
          //To run specified transactions per terminal- runMins must equal zero
          runTxnsPerTerminal=10
          //To run for specified minutes- runTxnsPerTerminal must equal zero
          runMins=0
          //Number of total transactions per minute
          limitTxnsPerMin=300

          //Set to true to run in 4.x compatible mode. Set to false to use the
          //entire configured database evenly.
          terminalWarehouseFixed=true

          //The following five values must add up to 100
          //The default percentages of 45, 43, 4, 4 & 4 match the TPC-C spec
          newOrderWeight=45
          paymentWeight=43
          orderStatusWeight=4
          deliveryWeight=4
          stockLevelWeight=4

          // Directory name to create for collecting detailed result data.
          // Comment this out to suppress.
          resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
          osCollectorScript=./misc/os_collector_linux.py
          osCollectorInterval=1
          //osCollectorSSHAddr=user@dbhost
          osCollectorDevices=net_eth0 blk_sda
          复制

          主要参数解释如下

          参数说明
          dbpostgres指定数据库类型(修改后增加的数据库类型)
          driverorg.postgresql.Driver数据库的驱动类名称,不需要更改
          conn

          jdbc:postgresql://localhost:5432/postgres

          连接字符串,需要更改localhost为对应pg服务IP、5432位对应pg服务端口、postgres为对应测试数据库名
          userpostgres用户名
          password123456用户密码
          warehouses10初始化加载数据时,需要创建多少仓库的数据。每仓库约80MB数据,数量根据实际服务器内存配置。
          loadWorkers4表示加载数据时,开启加载数据的进程数,加载速度会随worker数量的增加而有所提升。
          terminals20终端数量,指同时有多少终端并发执行,通常设置为CPU线程总数的2~6倍
          runTxnsPerTerminal0每个终端(terminal)运行的固定事务数量,例如:如果该值设置为10,意味着每个terminal运行10个事务,如果有32个终端,那整体运行320个事务后,测试结束。该参数配置为非0值时,下面的runMins参数必须设置为0
          runMins1要测试的整体时间,单位为分钟,如果runMins设置为60,那么测试持续1小时后结束。该值设置为非0值时,runTxnsPerTerminal参数必须设置为0。这两个参数不能同时设置为正整数,如果设置其中一个,另一个必须为0,主要区别是runMins定义时间长度来控制测试时间;runTxnsPerTerminal定义事务总数来控制时间。
          limitTnxsPermin0限制每分钟执行的事务总数。0表示不限制
          terminalWarehouseFixedtrue用于指定终端和仓库的绑定模式,设置为true时可以运行4.x兼容模式,意思为每个终端都有一个固定的仓库。设置为false时可以均匀的使用数据库整体配置,TPCC规定每个终端都必须有一个绑定的仓库,所以一般使用默认值true。

          • 数据准备

          创建数据库表并加载数据

            ./runDatabaseBuild.sh props.pg
            复制
            • 执行测试

            执行如下命令开始测试

              ./runBenchmark.sh props.pg
              复制

               测试完后会显示简要的测试结果,包括平均tpmC值(每分钟执行的事务数--每分钟能够处理的订单数量),tpmTOTAL(总订单量)等等。

              流量指标(Throughput,简称tpmC):按照TPC组织的定义,流量指标描述了系统在执行支付操作、订单状态查询、发货和库存状态查询这4种交易的同时,每分钟可以处理多少个新订单交易。所有交易的响应时间必须满 足TPC-C测试规范的要求,且各种交易数量所占的比例也应该满足TPC-C测试规范的要求。在这种情况下,流量指标值越大说明系统的联机事务处理能力越高。

              • 生成报告

              生成图形的脚本generateReport.sh要求操作系统环境中已经安装了R语言

                ./generateReport.sh my_result_2021-05-23_175724
                复制

                可以通过html查看生成的报告

                • 重新运行测试

                执行runDatabaseDestroy.sh脚本带配置文件可以将所有的数据和表都删除,然后再重新修改配置后运行测试。

                  ./runDatabaseDestroy.sh props.pg
                  复制
                  文章转载自北重楼,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论