前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >工具| benchmarksql使用指南

工具| benchmarksql使用指南

作者头像
用户1278550
发布2021-10-27 11:05:08
6.2K0
发布2021-10-27 11:05:08
举报
文章被收录于专栏:idbaidba

一 前言

BenchmarkSQL是一款经典的开源数据库测试工具,其包含 TPCC 测试脚本,支持MySQL、Oracle 、EnterpriseDB、PostgreSQL以及SQL Server 等数据库的性能压力测试。本文介绍 基于 Linux 系统安装 benchmark-5.1 版本 并且测试 postgresql。

二 实践

2.1 下载
  1. 从github 直接下载源码进行编译安装 git clone https://github.com/petergeoghegan/benchmarksql
  2. 安装ant 编译工具 yum install -y ant

还有一种是直接从官网下载zip安装包,直接解压缩即可。

2.2 安装

鉴于 BenchmarkSQL 是使用Java语言开发的,所以在安装压测工具之前,必须先安装JDK 并且配置JAVA 环境变量

代码语言:javascript
复制
PATH=$PATH:$HOME/bin:/usr/local/polardb_o_current/bin
JAVA_HOME=/usr/local/jdk1.8.0_111
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

将对应的数据库驱动配置到 /path/benchmarksql-5.1/lib/ 目录下,比如要针对pg进行压测,需要将驱动放到 /path/benchmarksql-5.1/lib/postgres

2.3 配置

配置文件

代码语言:javascript
复制
//数据库类型,postgres
db=postgres 
//驱动程序,每种数据库有对应的驱动
driver=org.postgresql.Driver  
conn= jdbc:postgresql//127.0.0.1:5444/benchmark
user=benchmark
password=benchmark
//仓库数量
warehouses=4    
//初始化数据的加载进程数量,默认为4,实际使用可以结合os性能做配置
loadWorkers=4   
//终端数,即并发客户端数量,通常设置为CPU线程总数的2~6倍
terminals=4 

 //每个终端运行的固定事务数量,如该值为10, 则每个terminal运行10个事务,如果有32个终端,那整体运行320个事务后,测试结束。该参数配置为非0值时,下面的runMins参数必须设置为0。
runTxnsPerTerminal=0
//runMins表示要压测的时间长度,单位为分钟。该值为非0值时,runTxnsPerTerminal参数必须设置为0。这两个参数不能同时设置为正整数,如果设置其中一个,另一个必须为0,主要区别是runMins定义时间长度来控制测试时间;runTxnsPerTerminal定义事务总数来控制时间。
runMins=5
//Number of total transactions per minute
limitTxnsPerMin=0

//终端和仓库的绑定模式,设置为true时可以运行4.x兼容模式,意思为每个终端都有一个固定的仓库。设置为false时可以均匀的使用数据库整体配置。TPCC规定每个终端都必须有一个绑定的仓库,所以一般使用默认值true。
terminalWarehouseFixed=true

 //下面五个值的总和必须等于100,默认值为:45, 43, 4, 4,4 ,与TPC-C测试定义的比例一致,实际操作过程中,可以调整比重来适应各种场景。
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4

测试过程中的整体逻辑通过一个例子来说明:

  1. 假如limitTxnsPerMin参数使用默认300,termnals终端数量设置为150并发,实际会计算一个值A=limitTxnsPerMin/terminals=2(此处需要注意,A为int类型,如果terminals的值大于limitTxnsPerMin,得到的A值必然为0,为0时该参数失效),此处记住A=2;
  2. 接下来,在整个测试运行过程中,软件会记录一个事务的开始时间和结束时间,假设为B=2000毫秒;
  3. 然后用60000 ms除以A得到一个值C=60000/2=30000,假如事务运行时间B<C,那么该事务执行完后,sleep C-B秒再开启下一个事务;假如B>C,意味着事务超过了预期时间,那么马上进行下一个事务。在本例子中,每分钟300个事务,设置了150个并发,每分钟执行2个并发,每个并发执行2秒钟完成,每个并发sleep 28秒,这样可以保证一分钟有两个并发,反推回来整体并发数为300/分钟。

2.4 压测

benchmarksql 其实和 sysbench 使用方法类似,先生成压测数据,然后压测 ,收尾的时候。

生成数据

sh runDatabaseBuild.sh props.polar

该操作会生成10个表 和一个sequence
压测

./runBenchmark.sh props.polar

代码语言:javascript
复制
+-------------------------------------------------------------+
00:59:23,752 [main] INFO   jTPCC : Term-00,      BenchmarkSQL v5.1devel
00:59:23,752 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
00:59:23,752 [main] INFO   jTPCC : Term-00,  (c) 2003, Raul Barbosa
00:59:23,752 [main] INFO   jTPCC : Term-00,  (c) 2004-2016, Denis Lussier
00:59:23,754 [main] INFO   jTPCC : Term-00,  (c) 2016, Jan Wieck
00:59:23,754 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
00:59:23,754 [main] INFO   jTPCC : Term-00,
00:59:23,755 [main] INFO   jTPCC : Term-00, db=postgres
00:59:23,755 [main] INFO   jTPCC : Term-00, driver=com.aliyun.polardb.Driver
00:59:23,755 [main] INFO   jTPCC : Term-00, conn=jdbc:polardb://127.0.0.1:5444/benchmark
00:59:23,755 [main] INFO   jTPCC : Term-00, user=benchmark
00:59:23,755 [main] INFO   jTPCC : Term-00,
00:59:23,755 [main] INFO   jTPCC : Term-00, warehouses=4
00:59:23,755 [main] INFO   jTPCC : Term-00, terminals=4
00:59:23,757 [main] INFO   jTPCC : Term-00, runMins=5
00:59:23,757 [main] INFO   jTPCC : Term-00, limitTxnsPerMin=0
00:59:23,757 [main] INFO   jTPCC : Term-00, terminalWarehouseFixed=true
00:59:23,758 [main] INFO   jTPCC : Term-00, useStoredProcedures=null
00:59:23,758 [main] INFO   jTPCC : Term-00,
00:59:23,758 [main] INFO   jTPCC : Term-00, newOrderWeight=45
00:59:23,758 [main] INFO   jTPCC : Term-00, paymentWeight=43
00:59:23,758 [main] INFO   jTPCC : Term-00, orderStatusWeight=4
00:59:23,758 [main] INFO   jTPCC : Term-00, deliveryWeight=4
00:59:23,758 [main] INFO   jTPCC : Term-00, stockLevelWeight=4
00:59:23,758 [main] INFO   jTPCC : Term-00,
00:59:23,758 [main] INFO   jTPCC : Term-00, resultDirectory=null
00:59:23,758 [main] INFO   jTPCC : Term-00, osCollectorScript=null
00:59:23,758 [main] INFO   jTPCC : Term-00,
00:59:23,874 [main] INFO   jTPCC : Term-00, C value for C_LAST during load: 165
00:59:23,875 [main] INFO   jTPCC : Term-00, C value for C_LAST this run:    237
00:59:23,875 [main] INFO   jTPCC : Term-00,
Term-00, Running Average tpmTOTAL: 37572.94    Current tpmTOTAL: 1239168    Memory Usage: 787MB / 1042MB
01:04:24,135 [Thread-2] INFO   jTPCC : Term-00,
01:04:24,135 [Thread-2] INFO   jTPCC : Term-00,
01:04:24,135 [Thread-2] INFO   jTPCC : Term-00, Measured tpmC (NewOrders) = 16982.49
01:04:24,135 [Thread-2] INFO   jTPCC : Term-00, Measured tpmTOTAL = 37572.67
01:04:24,135 [Thread-2] INFO   jTPCC : Term-00, Session Start     = 2021-10-17 00:59:24
01:04:24,135 [Thread-2] INFO   jTPCC : Term-00, Session End       = 2021-10-17 01:04:24
01:04:24,135 [Thread-2] INFO   jTPCC : Term-00, Transaction Count = 187868
结果解释

Running Average tpmTOTAL:每分钟平均执行事务数(所有事务)

Memory Usage:客户端内存使用情况

Measured tpmC (NewOrders) :每分钟执行的事务数(只统计NewOrders事务)

Transaction Count:执行的交易总数量

删除数据

./runDatabaseDestroy.sh props.polar

2.5 报告解析和生成html报告

benchmarksql 除了提供文字版输出, 还有 通过工具生成 html版本的报告 ,不过需要安装R语言和提前配置

resultDirectory=poc_%tY-%tm-%td_%tH%tM%tS 压测结束之后,使用命令

sh generateReport.sh poc_2021-10-17_191525

其中 poc_2021-10-17_191525 为 报告的路径。比如此次测试的案例的结果如下:

三 总结

工欲善其事必先利其器,不过工具只是其中的一部分,性能优化的路还很长,还需要结合OS系统网络,cpu,io ,db系统整体进行调优。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yangyidba 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二 实践
    • 2.1 下载
      • 2.2 安装
        • 2.3 配置
          • 生成数据
          • 该操作会生成10个表 和一个sequence
          • 压测
          • 结果解释
          • 删除数据
      • 2.4 压测
        • 2.5 报告解析和生成html报告
        • 三 总结
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档