基于BenchmarkSQL的Oracle数据库tpcc性能测试

基于BenchmarkSQL的Oracle数据库tpcc性能测试

  • 安装BenchmarkSQL及其依赖
    • 安装软件依赖
    • 编译BenchmarkSQL
  • BenchmarkSQL props文件配置
  • 数据库用户配置
  • BenchmarkSQL压测
    • 装载测试数据
    • TPC-C压测(固定事务数量)
    • TPC-C压测(固定时长)
    • 生成测试报告

安装BenchmarkSQL及其依赖

软件包作用
benchmarksql-5.0.ziptpcc性能测试
htop-3.0.5.zip可视化压测过程
R-3.6.3.tar.gz生成压测报告
ojdbc8.jarOracle JDBC驱动

🦁下载地址

  • BenchmarkSQL: https://github.com/petergeoghegan/benchmarksql
  • htop: https://github.com/htop-dev/htop/releases
  • R: https://mirror.bjtu.edu.cn/cran/src/base/R-3/R-3.6.3.tar.gz
  • ojdbc8: https://www.oracle.com/database/technologies/maven-central-guide.html

安装软件依赖

安装依赖软件包:

yum install gcc glibc-headers gcc-c++ gcc-gfortran readline-devel  libXt-devel pcre-devel libcurl libcurl-devel -y

yum install ncurses ncurses-devel autoconf automake zlib zlib-devel bzip2 bzip2-devel xz-devel -y

yum install java-1.8.0-openjdk ant -y

编译安装R语言:

yum install pango-devel pango libpng-devel cairo cairo-devel -y

tar -zxf R-3.6.3.tar.gz
cd R-3.6.3
./configure && make && make install

编译安装htop:

unzip htop-3.0.5.zip
cd htop-3.0.5
./autogen.sh && ./configure && make && make install

检查安装情况:

[root@primarydb benchmarksql]# ant -version
Apache Ant(TM) version 1.9.4 compiled on November 5 2018

[root@primarydb benchmarksql]# java -version
openjdk version "1.8.0_362"
OpenJDK Runtime Environment (build 1.8.0_362-b08)
OpenJDK 64-Bit Server VM (build 25.362-b08, mixed mode)

[root@primarydb benchmarksql]# htop --version
htop 3.0.5

[root@primarydb benchmarksql]# R --version
R version 3.6.3 (2020-02-29) -- "Holding the Windsock"
Copyright (C) 2020 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

编译BenchmarkSQL

解压安装包:

[root@primarydb benchmarksql]# unzip benchmarksql-5.0.zip
[root@primarydb benchmarksql]# ls benchmarksql-5.0/lib/
apache-log4j-extras-1.1.jar  firebird  log4j-1.2.17.jar  oracle  postgres

拷贝数据库驱动到BenchmarkSQL的lib/oracle目录下:

cp /u01/app/oracle/product/19.0.0/dbhome_1/jdbc/lib/ojdbc8.jar benchmarksql-5.0/lib/oracle/

cp /u01/app/oracle/product/19.0.0/dbhome_1/jlib/orai18n.jar benchmarksql-5.0/lib/oracle/

其中,ojdbc8.jar用于连接数据库,而orai18n.jar驱动可以避免因为字符集不兼容导致的报错。

使用ant编译BenchmarkSQL:

[root@primarydb benchmarksql]# cd benchmarksql-5.0

[root@primarydb benchmarksql-5.0]# ant
Buildfile: /opt/benchmarksql/benchmarksql-5.0/build.xml

init:
    [mkdir] Created dir: /opt/benchmarksql/benchmarksql-5.0/build

compile:
    [javac] Compiling 11 source files to /opt/benchmarksql/benchmarksql-5.0/build
    [javac] warning: [path] bad path element "/opt/benchmarksql/benchmarksql-5.0/lib/oracle/oraclepki.jar": no such file or directory
    [javac] 1 warning

dist:
    [mkdir] Created dir: /opt/benchmarksql/benchmarksql-5.0/dist
      [jar] Building jar: /opt/benchmarksql/benchmarksql-5.0/dist/BenchmarkSQL-5.0.jar

BUILD SUCCESSFUL
Total time: 0 seconds

BenchmarkSQL props文件配置

benchmarksql-5.0/run/props.xxx是使用BenchmarkSQL进行性能测试的主要配置文件。

Oracle数据库对应的文件名为props.ora

db=oracle                                               //测试的数据库类型
driver=oracle.jdbc.driver.OracleDriver                  //数据库驱动
conn=jdbc:oracle:thin:@localhost:1521:ORACLE_SVC_NAME   //数据库连接串
user=BENCHMARKSQL                                       //数据库连接用户
password=benchmarksql                                   //数据库连接用户密码

warehouses=100        //仓库数,控制测试数据量,每个仓库初始大小约为100MB
loadWorkers=8        //初始化测试数据时,往数据库中加载数据的并发进程数

terminals=16            //客户端并发连接数
//To run specified transactions per terminal- runMins must equal zero
runTxnsPerTerminal=10   //每个客户端运行的事务数量。该参数不为0时,runMins必须为0
//To run for specified minutes- runTxnsPerTerminal must equal zero
runMins=0               //测试的时长,单位为分钟。该参数不为0时,runTxnsPerTerminal必须为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
//TPC-C规范的默认百分比为45:43:4:4:4
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4

// Directory name to create for collecting detailed result data.
//测试结果数据存储位置和命名规则
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
osCollectorScript=./misc/os_collector_linux.py
osCollectorInterval=1

//收集OS负载信息:eth0和vdb必须匹配服务器网卡和磁盘名称
//osCollectorSSHAddr=user@dbhost
osCollectorDevices=net_eth0 blk_vdb

其中几个重要参数建议按如下规则配置:

  • warehouses:每个仓库初始大小约100M。建议测试数据量为数据库服务器物理内存的2到5倍大小;
  • loadWorkers:建议配置为CPU核数;
  • terminals:建议配置为CPU核数的2到6倍大小。

benchmarksql-5.0/run/sql.common路径下是BenchmarkSQL用于创建测试数据的SQL脚本,可以按需调整。

[root@primarydb benchmarksql-5.0]# ls run/sql.common/
buildFinish.sql  foreignKeys.sql  indexCreates.sql  indexDrops.sql  tableCreates.sql  tableDrops.sql  tableTruncates.sql

数据库用户配置

创建BenchmarkSQL测试用户:

SQL> create tablespace benchmarksql;
SQL> create user benchmarksql identified by "benchmarksql" default tablespace benchmarksql;
SQL> grant connect,resource,create session,create view,create job,create synonym to benchmarksql;
SQL> alter user benchmarksql quota unlimited on benchmarksql;

SQL> alter tablespace benchmarksql add datafile;
SQL> alter tablespace benchmarksql add datafile;
SQL> alter tablespace benchmarksql add datafile;

SQL> select file_name, tablespace_name, bytes/1024/1024 total_mb,
maxbytes/1024/1024 max_mb, autoextensible
from dba_data_files where tablespace_name='BENCHMARKSQL';

BenchmarkSQL压测

装载测试数据

使用runDatabaseBuild.sh脚本生成测试数据:

[root@primarydb benchmarksql-5.0]# cd run
[root@primarydb run]# cp props.ora ora.properties
[root@primarydb run]# ./runDatabaseBuild.sh ora.properties

TPC-C压测(固定事务数量)

修改ora.properties中的测试模式为固定事务数量:

runTxnsPerTerminal=10
runMins=0

使用runBenchmark.sh脚本进行测试:

[root@primarydb run]# ./runBenchmark.sh ora.properties
...
...
18:29:53,870 [Thread-15] INFO   jTPCC : Term-00, Measured tpmC (NewOrders) = 140.32
18:29:53,870 [Thread-15] INFO   jTPCC : Term-00, Measured tpmTOTAL = 289.63
18:29:53,870 [Thread-15] INFO   jTPCC : Term-00, Session Start     = 2023-04-15 18:29:20
18:29:53,870 [Thread-15] INFO   jTPCC : Term-00, Session End       = 2023-04-15 18:29:53
18:29:53,870 [Thread-15] INFO   jTPCC : Term-00, Transaction Count = 160

执行事务的总数等于terminalsrunTxnsPerTerminal的乘积。

测试过程中,可以打开另一个终端执行htop命令来查看进程的资源消耗情况。

测试结束后,会在当前路径下生成一个以ora.properties中参数resultDirectory规则命名的结果目录。

TPC-C压测(固定时长)

修改ora.properties中的测试模式为固定时长:

runTxnsPerTerminal=0
runMins=180

销毁测试数据后重新加载测试:

[root@primarydb run]# ./runDatabaseDestroy.sh ora.properties
[root@primarydb run]# ./runDatabaseBuild.sh ora.properties
[root@primarydb run]# ./runBenchmark.sh ora.properties

生成测试报告

使用generateReport.sh脚本来生成测试报告(需要安装R语言):

[root@primarydb run]# ls my_result_2023-04-15_182919/
data  run.properties

[root@primarydb run]# ./generateReport.sh my_result_2023-04-15_182919/
Generating my_result_2023-04-15_182919//tpm_nopm.png ... OK
Generating my_result_2023-04-15_182919//latency.png ... OK
Generating my_result_2023-04-15_182919//cpu_utilization.png ... OK
Generating my_result_2023-04-15_182919//dirty_buffers.png ... OK
Generating my_result_2023-04-15_182919//blk_vdb_iops.png ... OK
Generating my_result_2023-04-15_182919//blk_vdb_kbps.png ... OK
Generating my_result_2023-04-15_182919//net_eth0_iops.png ... OK
Generating my_result_2023-04-15_182919//net_eth0_kbps.png ... OK
Generating my_result_2023-04-15_182919//report.html ... OK

[root@primarydb run]# ls my_result_2023-04-15_182919/
blk_vdb_iops.png  cpu_utilization.png  dirty_buffers.png  net_eth0_iops.png  report.html     tpm_nopm.png
blk_vdb_kbps.png  data                 latency.png        net_eth0_kbps.png  run.properties

其中,report.html是生成的测试报告,png文件是报告中包含的图片。

报告内容大致如下。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/12282.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[ 云原生 | Docker ] 构建高可用性的 SQL Server:Docker 容器下的主从同步实现指南

文章目录 一、前言二、SQL Server 主从同步的原理介绍三、具体的搭建过程3.1 准备工作3.1.1 卸载旧版本(如果有,可选,非必须)3.1.2 安装 Docker3.1.3 验证本地 Docker 是否安装成功 3.2 创建 Docker 网络3.3 创建主从节点的 SQL S…

[Linux系统]系统安全及应用一

系统安全及应用 一、账号安全基本措施1.1系统账号清理1.1.1将非登录用户的shell设为/sbin/nologin1.1.2锁定长期不使用的账号1.1.3删除无用的账号1.1.4锁定账号文件文件chattr1.1.5查看文件校验和md5sum 1.2密码安全控制1.2.1设置密码有效期 1.3历史命令限制1.3.1 减少记录命令…

C语言笔记 | 一元三次方程

文章目录 0x00 前言 0x01 问题分析 0x02 代码设计 0x03 完整代码 0x04 运行效果 0x05 参考文献 0x06 总结 0x00 前言 在 1545 年,意大利学者卡丹所写的《关于代数的大法》中,提出了一元三次方程的求根公式。人们将其称为卡丹公式。对于标准型的一…

港科夜闻|国务院港澳办主任夏宝龙在香港科大考察期间,表示对学校开展创科工作的鼓励及希望...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、国务院港澳办主任夏宝龙在香港科大考察期间,表示对学校开展创科工作的鼓励及希望。考察期间,夏宝龙主任参观了香港科大的空气动力学和声学实验中心,以及香港科大先进显示与光电子技术国…

4个 Python 库来美化你的 Matplotlib 图表

Matplotlib是一个被广泛使用的Python数据可视化库,相信很多人都使用过。 但是有时候总会觉得,Matplotlib做出来的图表不是很好看、不美观。 今天我就给大家分享四个美化Matplotlib图表的Python库,它们可以轻松让你的Matplotlib图表变得好看…

( “树” 之 DFS) 404. 左叶子之和 ——【Leetcode每日一题】

404. 左叶子之和 给定二叉树的根节点 root ,返回所有左叶子之和。 示例 1: 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 示例 2: 输入: root [1]…

OpenGL入门教程之 深入理解

一、OpenGL简介 OpenGL是一种用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程规范。OpenGL包含一系列可以操作图形和图像的函数,但OpenGL没有实现这些函数,OpenGL仅规定每个函数应该如何执行以及其输出值(类似接口),所以OpenGL仅是一…

基于JSP的网上购物系统的设计与实现(论文+源码)_kaic

摘 要 近些年来,社会的生产力和科技水平在不断提高,互联网技术也在不断更新升级,网络在人们的日常生活中扮演着一个重要角色,它极大地方便了人们的生活。为了让人们实现不用出门就能逛街购物,网络购物逐渐兴起慢慢变得…

新一代AI带来更大想象空间!上海将打造元宇宙超级场景!

引子 上海市经信委主任吴金城4月12日在“2023上海民生访谈”节目表示,上海将着力建设元宇宙智慧医院、前滩东体元宇宙、张江数字孪生未来之城等元宇宙超级场景。 吴金城说,新一代人工智能将带来更大的想象空间。比如,人工智能和元宇宙数字人的…

ESP32设备驱动-SHT20温湿度传感器驱动

SHT20温湿度传感器驱动 文章目录 SHT20温湿度传感器驱动1、SHT20介绍2、硬件准备3、软件准备4、驱动实现1、SHT20介绍 Sensirion 的 SHT20 湿度和温度传感器已成为外形尺寸和智能方面的行业标准:嵌入在 3 x 3mm 封装和 1.1mm 高度的可回流焊双扁平无引线 (DFN) 封装中,它提供…

项目人力资源管理

相关概念 组织结构图:用图形表示项目汇报关系。最常用的有层次结构图、矩阵图、文本格式的角色描述等3种。 任务分配矩阵(或称责任分配矩阵)(RAM):用来表示需要完成的工作由哪个团队成员负责的矩阵,或需要完成的工作与哪个团队成员有关的矩阵。 一、规划人力资源管理(编…

动力节点Vue笔记——Vue与Ajax

四、Vue与AJAX 4.1 回顾发送AJAX异步请求的方式 发送AJAX异步请求的常见方式包括: 原生方式,使用浏览器内置的JS对象XMLHttpRequest const xhr new XMLHttpRequest()xhr.onreadystatechange function(){}xhr.open()xhr.send() 原生方式&#xff0…

zabbix客户端配置

一、zabbix客户端配置 1.实验环境:关闭防火墙和安全模块 systemctl disable --now firewalld setenforce 0 2.服务端和客户端都要时间同步 yum install -y ntpdate #注意安装需要用网络源安装,不能用本地源 ntpda…

google账号注册流程升级了!2023年谷歌gmail邮箱帐号注册申请教程(完整版)

google账号注册升级了! 2023年4月份google账号注册流程升级了,升级之前的版本是完成验证手机号码后才填写用户资料,升级之后的版本是需要先填写用户资料才能注册谷歌gmail邮箱帐号; 2023年谷歌gmail邮箱帐号注册申请教程 1、打开…

电子器件系列34:tvs二极管(2)

一、基本原理: 二、重要产数: 不同的资料对于相同的参数可能有不同的命名,要根据实际情况来确定参数的意义 这里以上图表格里的参数名称进行解析,以其他资料作为参考。 结合图表和伏安特性曲线,再结合下面的图我是…

这才是后端API该有的样子

一般系统大致架构如下: 有些小伙伴会说,这个架构太简单太low了吧,什么网关、缓存、消息中间件都没有。 需要说明的是,因为我们主题是API接口(tbAPI,pinduoduo API接口调用)所以聚焦这一点上就行…

Linux命令·ping

Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性,我们经常会说“ping一下某机器,看是不是开着”、不能打开网页时会说“你先ping网关地址192.168.1.1试试”。它通过发送ICMP ECHO_REQUEST数据包到网络主机&#xff08…

【小程序】django笔记2

templates路径除了在settings中的templates的DIR[]中申明还有什么别的方法? 已知,django底层根据app注册顺序查找各app文件中的templates文件夹,在其中搜索目标模版文件。 已知,app注册在settings中的INSTAll-APPS里。 已知&#…

C++ 缺省参数 函数重载 引用

缺省参数,我们先看一下什么是缺省参数 首先,这个是我们的需要传参的函数,这里我们传入 1 然后就输出 a 下面我们就看一下缺省参数 我们现在看main函数里面调用fun函数,这里会输出多少呢? OK 这里我们分别输出了0 和 1…

【2023】cookie是什么?有什么用?一篇文章彻底搞懂cookie

一个不大不小的问题 假设服务器有一个接口,通过请求这个接口,可以添加一个管理员 但是,不是任何人都有权力做这种操作的 那么服务器如何知道请求接口的人是有权力的呢? 答案是:只有登录过的管理员才能做这种操作 …