1.将下载好的benchmarkSQL5.0与JDK1.8上传至服务器端,数据库这边选择linux6.8上的Oracle11g数据库。
2.安装JDK
rpm -ivh jdk-8u261-linux-x64.rpm(也可以安装在指定目录下,rpm -i --badreloc --relocate /usr/java=/home/java jdk-6u43-linux-amd64.rpm)
卸载任何较早的JDK软件包安装。
#rpm -e package_name
要升级软件包:
#rpm -Uvh jdk-8uversion-linux-x64.rpm
用户可以确认默认的(最近安装的)JDK版本
java -version
3.配置java的环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_261-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:./ojdbc6.jar:./ojdbc7.jar:$CLASSPATH
export JAVA_HOME=/usr/java/jdk1.8.0_261-amd64
export PATH=${JAVA_HOME}/bin:$PATH
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar:${CLASSPATH}
source /etc/profile
4.安装 ant、R
# yum install ant R R-devel
5.解压benchmark1SQL5.0
unzip benchmarksql-5.0.zip -d /u03
cd benchmarksql-5.0
export CLASSPATH=.:/usr/share/java/ant-launcher.jar:${CLASSPATH}
ant -buildfile ./build.xml
6.oracle 驱动
cat ./lib/oracle/README.txt
Copy the ojdbc<version>.jar to use with Oracle here, or make
sure that the environment variable ORACLE_HOME is set properly
and the JDBC driver is found at $ORACLE_HOME/lib.
/u01/app/oracle/product/11.2.0.4/db_1/jdbc/lib
ojdbc5.jar ojdbc6.jar
cp /u01/app/oracle/product/11.2.0.4/db_1/jdbc/lib/ojdbc5.jar ./lib/oracle/
cp /u01/app/oracle/product/11.2.0.4/db_1/jdbc/lib/ojdbc6.jar ./lib/oracle/
cp /u01/app/oracle/product/11.2.0.4/db_1/jdbc/lib/ojdbc5.jar /u03/benchmarksql-5.0/run/
cp /u01/app/oracle/product/11.2.0.4/db_1/jdbc/lib/ojdbc6.jar /u03/benchmarksql-5.0/run/
7.配置log4j
$ find ./ -name log4j.properties
./run/log4j.properties
vi ./run/log4j.properties
log4j.rootLogger=INFO, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= %d{HH:mm:ss,SSS} [%t] %-5p %x %C{1} : %m%n
创建测试用户:
sqlplus / as sysdba
create tablespace benchmarksql datafile '+DATA' size 5g autoextend on next 500m;
create user benchmarksql identified by oracle default tablespace benchmarksql;
grant dba,connect to benchmarksql
设置ORACLE 批量提交参数
alter system set commit_write='batch,nowait';
8.修改配置文件
配置文件详解:
1.db=oracle //数据库类型,postgres/oracle/mysql/firebird/goldilocks
2.driver=oracle.jdbc.driver.OracleDriver //客户端驱动
conn=jdbc:oracle:thin:@192.168.174.121:1521:racdb1 //oracle数据库连接字符串
user=benchmarksql //数据库登录用户名,需要我们提前在数据库中建立benchmarksql用户
password=oracle //如上用户密码
3.warehouses=20 //仓库数量,每个warehouse大小大概是100MB
4.loadWorkers=4 //用于在数据库中初始化数据的加载进程数量,默认为4,实际使用过程中可以根据实际情况调整,加载速度会随worker数量的增加而有所提升
5.terminals=10 //终端数,即并发客户端数量,通常设置为CPU线程总数的2~6倍
6. runTxnsPerTerminal=0
//To run specified transactions per terminal- runMins must equal zero
//每个终端(terminal)运行的固定事务数量,例如:如果该值设置为10,意味着每个terminal运行10个事务,如果有32个终端,那整体运行320个事务后,测试结束。该参数配置为非0值时,下面的runMins参数必须设置为0
runMins=60
//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,假如事务运行时间B<C,那么该事务执行完后,sleep C-B秒再开启下一个事务;假如B>C,意味着事务超过了预期时间,那么马上进行下一个事务。在本例子中,每分钟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测试定义的比例一致,实际操作过程中,可以调整比重来适应各种场景。
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_前缀固定)
9.测试:
./runDatabaseDestroy.sh ./props.oracle
./runDatabaseBuild.sh ./props.oracle
./runBenchmark.sh ./props.oracle
结果:
Term-00, Running Average tpmTOTAL: 84.37 Current tpmTOTAL: 9384 Memory Usage: 17MB / 44MB
11:22:18,104 [Thread-6] INFO jTPCC : Term-00,
11:22:18,105 [Thread-6] INFO jTPCC : Term-00,
11:22:18,105 [Thread-6] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 36.9
11:22:18,106 [Thread-6] INFO jTPCC : Term-00, Measured tpmTOTAL = 84.37
11:22:18,106 [Thread-6] INFO jTPCC : Term-00, Session Start = 2020-09-15 11:05:49
11:22:18,106 [Thread-6] INFO jTPCC : Term-00, Session End = 2020-09-15 11:22:18
11:22:18,106 [Thread-6] INFO jTPCC : Term-00, Transaction Count = 1389
10.生成report报告,这里需要安装R语言包。
./generateGraphs.sh ./my_result_2019-06-10_105020/
./generateReport.sh ./my_result_2019-06-10_105020/
安装R语言缺少:
texinfo-tex-4.13a-8.el6.x86_64
libicu-devel-4.2.1-14.el6.x86_64
./runSQL.sh props.oracle ./sql.common/tableCreates.sql
./runLoader.sh props.oracle numWarehouses 20
./runSQL.sh props.oracle ./sql.common/indexCreates.sql
./runBenchmark.sh props.
相关网站:
http://rpm.pbone.net/
http://mirrors.163.com/
https://developer.aliyun.com/mirror/
https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/base/
R包安装:
https://blog.csdn.net/lichangzai/article/details/39272469?utm_source=app