当前位置: 首页 > article >正文

BenchmarkSQL使用教程

1. TPC-C介绍

    Transaction Processing Performance Council (TPC) 事务处理性能委员会,是一家非盈利IT组织,他们的目的是定义数据库基准并且向产业界推广可验证的数据库性能测试。而TPC-C最后一个C代表的是压测模型的版本,在这之前还有TPC-A、TPC-B。A / B 两个版本模拟的是银行转账业务,相对业务模型比较简单。TPC-C自92年初发布,在过去20多年,不管是在业界还是学术界都是应用最为广泛的OLTP压测工具。

    TPC-C测试用到的模型是一个大型的商品批发销售公司,它拥有若干个分布在不同区域的商品仓库。当业务扩展的时候,公司将添加新的仓库。每个仓库负责为10个销售点供货,其中每个销售点为3000个客户提供服务,每个客户提交的订单中,平均每个订单有10项产品,所有订单中约1%的产品在其直接所属的仓库中没有存货,必须由其他区域的仓库来供货。同时,每个仓库都要维护公司销售的100000种商品的库存记录。

1.1 TPC-C表结构

    TPC-C测试系统数据库由9张表组成,它们的关系如下图所示,表框里的数字表示该表将要存放多少条记录,仓库数W的调整在测试中能够体现数据库所能够支持的数据规模的能力:

  •     Warehouse(仓库表,W表示仓数,能够体现数据库所能够支持的数据规模)
  •     District(区域表,W*10表每个仓为10个销售点供货)
  •     Customer(用户表,W*30k表示每个供货点为3000个客户提供服务)
  •     Stock(库存表,W*100k表示每个仓库维护10w种商品库存记录)
  •     Order(订单表)
  •     New-Order(新订单表)
  •     Item(商品表,表固定大小为10w)
  •     Order-Line(订单行)
  •     History(历史表)
1.2 TPC-C事务模型 

TPC-C需要处理的交易事务主要为以下几种:

  1. 新订单(New-Order,占比45%) :客户输入一笔新的订货交易;
  2. 支付操作(Payment,占比43%) :更新客户帐户余额以反映其支付状况;
  3. 发货(Delivery,占比4%) :发货(模拟批处理交易);
  4. 订单状态查询(Order-Status,占比4%) :查询客户最近交易的状态;
  5. 库存状态查询(Stock-Level,占比4%) :查询仓库库存状况,以便能够及时补货。

    TPC-C五种交易类型中StockLevel和OrderStatus这两种交易属于只读事务,NewOrder 、Payment、Delivery属于读写事务,这五种请求是互相独立运行的,在交易组合中读写操作占92%,只读操作占8%。TPC-C通过tpmC值(Transactions per Minute)来衡量系统最大有效吞吐量(MQTh,Max Qualified Throughput),其中Transactions以NewOrder Transaction为准,即最终衡量单位为每分钟处理的新订单数,这就说明了:如果一台机器有 1000 tpmc (Transactions per Minute),那么它实际上处理的交易(请求)为 1000/45% = 2222。 

2. BenchmarkSQL使用教程

    目前做TPC-C压测的开源工具很多,如mysql-tpcc、HammerDB、Benchmarksql等。这三种是在做TPC-C压测使用最多的,也是资料比较丰富的工具。由于我们在工作使用的数据库种类会比较多,mysql-tpcc只能用在MySQL或者兼容MySQL的数据库。HammerDB使用方便,图形化界面可测DB2、PG、Oracle、MySQL等但是对于NewSQL类数据库兼容不是很友好。因为BenchmarkSQL支持多种TPC模型,并且支持不同的数据库类型(如Oracle, PG, MySQL), 本篇文章介绍BenchmarkSQL的使用教程。

2.1 安装BenchmarSQL

下载安装包:https://sourceforge.net/projects/benchmarksql/?source=typ_redirect

上传到服务器解压:

unzip benchmarksql-5.0.zip

安装编译工具ant:

apt install ant

 使用ant编译BenchmarkSQL:

> cd benchmarksql-5.0
> ant
init:
    [mkdir] Created dir: /root/code/benchmark/benchmarksql-5.0/build

compile:
    [javac] Compiling 11 source files to /root/code/benchmark/benchmarksql-5.0/build

dist:
    [mkdir] Created dir: /root/code/benchmark/benchmarksql-5.0/dist
      [jar] Building jar: /root/code/benchmark/benchmarksql-5.0/dist/BenchmarkSQL-5.0.jar

BUILD SUCCESSFUL
Total time: 1 second

修改配置文件:

cd run                   # 这里props.ora和props.pg是针对oracle和pg的配置文件
cp props.pg props.mysql  # 将pg的配置文件复制出来一份为mysql
vim props.mysql          # 修改mysql的连接信息
参数说明
dbtpcc指定数据库类型
drivercom.mysql.cj.jdbc.Driver数据库的驱动类名称
connjdbc:mysql://localhost:3306/tpcc连接字符串
userroot用户名
passwordxxxxx用户密码
warehouses1初始化加载数据时,需要创建多少仓库的数据。每仓库约80MB数据
loadWorkers8表示加载数据时,开启加载数据的进程数。
terminals1终端数量,指同时有多少终端并发执行,表示并发程度。
runTxnsPerTerminal0每分钟每个终端执行的事务数,0表示不限制
runMins10执行多少分钟。
limitTxnsPerMin0限制每分钟执行的事务总数。0表示不限制
terminalWarehouseFixedtrue用于指定终端和仓库的绑定模式,设置为true时可以运行4.x兼容模式,意思为每个终端都有一个固定的仓库。设置为false时可以均匀的使用数据库整体配置。

注意:runMins和runTxnsPerTerminal这两个参数指定了两种运行方式,前者是按照指定运行时间执行,以时间为标准;后者以指定每个终端的事务数为标准执行。两者不能同时生效,必须有一个设定为0。

2.2 创建数据库

登录MySQL数据库:

mysql -u root -p

创建数据库tpcc:

mysql> create database tpcc;
Query OK, 1 row affected (0.04 sec)

mysql> use tpcc;
Database changed

mysql> show tables;
Empty set (0.01 sec)
2.3 加载数据
cd run
./runDatabaseBuild.sh props.mysql

  创建并初始化表—共9张表(warehouse, Stock, Item, Order-Line, New-Order, History, District, Customer,Order),外加一个配置表。 同时会创建相应的索引、主外键参考。

2.4 开始压测
./runBenchmark.sh props.mysql

 执行结束后,取tpmC和tpmTOTAL作为测试指标。

2.5 删除数据库和数据
./runDatabaseDestroy.sh props.mysql

http://www.kler.cn/a/446551.html

相关文章:

  • 滚珠花键的保养与维护方法
  • 腾讯云云开发 Copilot 深度探索与实战分享
  • android recycleview 中倒计时数据错乱
  • 学习反射(反射的使用,反射的应用场景)
  • 【LeetCode】45.跳跃游戏II
  • day38-SSH安全登录
  • object-c 2.0入门笔记
  • srping2.0+升级到spring3.0+遇到的问题,es部分记录一下
  • 详解Linux防火墙-Firewalld原理与实战操作
  • 常用的消息中间件(ActiveMQ、RabbitMQ、RocketMQ、Kafka)面试精华
  • Git(10)之忽略指定文件改动
  • iOS 多个输入框弹出键盘处理
  • 我在华为的安全日常
  • 嵌入式硬件面试题
  • Pycharm和Jupyter Notebook的比较【笔记】
  • 【ETCD】【实操篇(六)】使用多种方式从ETCD集群中读取数据【Get keys by prefix】
  • 《商业模式2.0图鉴》读书笔记(如何构建创新驱动的商业模式:打破定律与重塑价值)
  • 使用Redis实现限流
  • 鸿蒙项目云捐助第十九讲云捐助百度智能名片识别
  • YOLO系列正传(三)神经网络的反向传播(back propagation)与公式推导
  • C语言学习-数组练习
  • OB删除1.5亿数据耗费2小时
  • 开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)综述
  • 《计算机组成及汇编语言原理》阅读笔记:p9-p27
  • 构建MacOS应用小白教程(打包 签名 公证 上架)
  • centos7下制作DockerFile 镜像