BenchmarkSQL简介及使用

您所在的位置:网站首页 sql测试工具用文本吗知乎 BenchmarkSQL简介及使用

BenchmarkSQL简介及使用

2024-05-31 23:15| 来源: 网络整理| 查看: 265

BenchmarkSQL简介及使用

一、介绍:

BenchmarkSQL是对OLTP数据库主流测试标准TPC-C的开源实现。目前最新版本为V5.0,该版本支持Firebird,Oracle和PostgreSQL数据库,测试结果详细信息存储在CSV文件中,并可以将结果转换为HTML报告。

 

二、项目地址:

下载地址:https://sourceforge.net/projects/benchmarksql/

 

三、使用文档:

我下载的是BenchmarkSQL5.0,其他版本对JDK的要求见各版本自己的HOW-TO-RUN.txt文件,以下是在mysql上的运行步骤:

 

0.基本要求:

Use of JDK7 is required.

 

1.在mysql上创建benchmarksql用户和数据库

mysql -uroot

MariaDB [mysql]> CREATE USER 'bms'@'%' IDENTIFIED BY 'bms';

MariaDB [mysql]> GRANT ALL ON *.* TO 'bms'@'%' WITH GRANT OPTION;

MariaDB [mysql]> flush privileges;

MariaDB [mysql]> create database bmsdb;

 

使用ant对BenchmarkSQL源码进行编译:

   注意:benchmarksql不支持mysql数据库测试,需要修改源码。源码修改后进行如下编译:

    首先如果环境中没有ant,需要先现在ant并配置环境变量:

    从网址https://ant.apache.org/bindownload.cgi下载apache-ant-xxx.bin.zip压缩包;

解压放在某目录下,这里假设放在/usr/local/下,即/usr/local/apache-ant-xxx/;

将ant软连接到/bin目录下

cd /bin

     ln -s ant /usr/local/apache-ant-1.10.6/bin/ant

    切换到benchmarksql文件夹下,用ant编译程序:

        [fq@localhost ~] $ cd benchmarksql

        [fq@localhost benchmarksql] $ ant

编译完成后,就可以使用该程序了。

 

创建BenchmarkSQL配置文件:

cp props.ora props.mysql

props.mysq中的驱动及连接串

[fq@localhost run]$ vi props.mysql

db=mysql

driver=org.mariadb.jdbc.Driver

conn=jdbc:mysql://192.168.18.32:3306/bmsdb

user=bms

password=bms

 

使用mariadb的jdbc Driver

需要下载jdbc连接器mariadb-java-client-x.x.x.jar

网址:https://mariadb.com/downloads/#connectors

 

上面那段代码 ,driver驱动类为:org.mariadb.jdbc.Driver

url为:jdbc:mysql://localhost:3306/dbName 或者为jdbc:maria://localhost:3306/dbName

 

    一个warehouse大概100MB,warehouse总共大小通常为RAM的2-5倍,终端terminals(线程)数量通常为cpu的2-6倍

Note that the provided example configuration is meant to test

    the functionality of your setupr. That benchmarksql can connect

    to the database and execute transactions. That configuration

    is NOT a benchmark run. To make it into one you need to have a

    configuration that matches your database server size and

    workload. Leave the sizing for now and perform a first functional

    test.

 

    The BenchmarkSQL database has an initial size of approximately

    100-100MB per configured warehouse. A typical setup would be

    a database of 2-5 times the physical RAM of the server.

 

    Likewise the number of concurrent database connections (config

    parameter terminals) should be something about 2-6 times the

    number of CPU threads.

 

    Last but not least benchmark runs are normally done for hours,

    if not days. This is because on the database sizes above it

    will take that long to reach a steady state and make sure that

    all performance relevant functionality of the database, like

    checkpointing and vacuuming, is included in the measurement.

 

    So you can see that with a modern server, that has 32-256 CPU

    threads and 64-512GBi, of RAM we are talking about thousands of

    warehouses and hundreds of concurrent database connections.

 

4.建表/运行测试/销毁

./runDatabaseBuild.sh props.mysql //建表时,sequence错误,这个无所谓

./runBenchmark.sh props.mysql

./runDatabaseDestroy.sh props.mysql

 

5. 生成结果报告:

BenchmarkSQL测试会收集详细的性能指标,如果配置了操作系统参数收集,同样也会收集操作系统级别网卡和磁盘的性能指标,默认生成的数据在run/my_result_xx目录下。生成的报告,可以通过脚本文件generateReport.sh + my_result_xx生成带有图形的HTML文件。生成图形的脚本generateReport.sh要求操作系统环境中已经安装了R语言,R语言的安装在这里不赘述。

    Use the generateReport.sh DIRECTORY script to create an HTML file

    with graphs. This requires R to be installed, which is beyond the

    scope of this HOW-TO.

 

6.日志:

如果运行过程中产生日志和错误,都会存储在run目录下,可以打开看是否有报错退出。

 

四、props配置文件的参数说明:

配置文件重要参数如下:

        1)warehouse:

            BenchmarkSQL数据库每个warehouse大小大概是100MB,如果该参数设置为10,那整个数据库的大小大概在1000MB。建议将数据库的大小设置为服务器物理内存的2-5倍,如果服务器内存为16GB,那么warehouse设置建议在328~819之间。

        2)terminals:

            terminals指的是并发连接数,建议设置为服务器CPU总线程数的2-6倍。如果服务器为双核16线程(单核8线程),那么建议配置在32~96之间。

 

配置文件详解:

1.db=mysql    //数据库类型,postgres/oracle/mysql/firebird/goldilocks

2.driver=org.mariadb.jdbc.Driver  //客户端驱动

conn=jdbc:mysql://192.168.18.32:3306/bmsdb  //mysql数据库连接字符串

user=bms    //数据库登录用户名,需要我们提前在数据库中建立benchmarksql用户

password=bms    //如上用户密码

3.warehouses=1    //仓库数量,每个warehouse大小大概是100MB

4.loadWorkers=4    //用于在数据库中初始化数据的加载进程数量,默认为4,实际使用过程中可以根据实际情况调整,加载速度会随worker数量的增加而有所提升

5.terminals=1    //终端数,即并发客户端数量,通常设置为CPU线程总数的2~6倍

6. runTxnsPerTerminal=10

//To run specified transactions per terminal- runMins must equal zero

//每个终端(terminal)运行的固定事务数量,例如:如果该值设置为10,意味着每个terminal运行10个事务,如果有32个终端,那整体运行320个事务后,测试结束。该参数配置为非0值时,下面的runMins参数必须设置为0

 runMins=0

//To run for specified minutes- runTxnsPerTerminal must equal zero

//要测试的整体时间,单位为分钟,如果runMins设置为60,那么测试持续1小时候结束。该值设置为非0值时,runTxnsPerTerminal参数必须设置为0。这两个参数不能同时设置为正整数,如果设置其中一个,另一个必须为0,主要区别是runMins定义时间长度来控制测试时间;runTxnsPerTerminal定义事务总数来控制时间。

limitTxnsPerMin=300

测试吞吐量时,需要将此值设置极大(无限大),这样就能够保证不会出现某个终端sleep现象。

//每分钟事务总数限制,该参数主要控制每分钟处理的事务数,事务数受terminals参数的影响,如果terminals数量大于limitTxnsPerMin值,意味着并发数大于每分钟事务总数,该参数会失效,想想也是如此,如果有1000个并发同时发起,那每分钟事务数设置为300就没意义了,上来就是1000个并发,所以要让该参数有效,可以设置数量大于并发数,或者让其失效,测试过程中目前采用的是默认300。

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

9.terminalWarehouseFixed=true

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

10.newOrderWeight=45

paymentWeight=43

orderStatusWeight=4

deliveryWeight=4

stockLevelWeight=4

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

TPC-C 系统需要处理的交易有以下五种:

New-Order: 客户输入一笔新的订货交易Payment:更新客户账户余额以反应其支付状况Delivery:发货(批处理交易)Order-Status:查询客户最近交易的状态Stock-Level:查询仓库库存状况,以便能够及时补货。

各个类型的交易在系统中所占的比例:

New-Order: 45%Payment:43%Delivery:4%Order-Status:4%Stock-Level:4%

11.resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS

//测试数据生成目录,默认无需修改,默认生成在run目录下面,名字形如my_result_xxxx的文件夹。

12.osCollectorScript=./misc/os_collector_linux.py

//操作系统性能收集脚本,默认无需修改,需要操作系统具备有python环境

13.  osCollectorInterval=1

//操作系统收集操作间隔,默认为1秒

14.//osCollectorSSHAddr=user@dbhost

//操作系统收集所对应的主机,如果对本机数据库进行测试,该参数保持注销即可,如果要对远程服务器进行测试,请填写用户名和主机名。

15.osCollectorDevices=net_eth0 blk_sda

//操作系统中被收集服务器的网卡名称和磁盘名称,例如:使用ifconfig查看操作系统网卡名称,找到测试所走的网卡,名称为enp1s0f0,那么下面网卡名设置为net_enp1s0f0(net_前缀固定);使用df -h查看数据库数据目录,名称为(/dev/sdb                33T   18T   16T   54% /hgdata),那么下面磁盘名设置为blk_sdb(blk_前缀固定)

    

五、源码修改:

参考:https://www.jianshu.com/p/622545cb134

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3