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

基于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 -yyum install ncurses ncurses-devel autoconf automake zlib zlib-devel bzip2 bzip2-devel xz-devel -yyum install java-1.8.0-openjdk ant -y

编译安装R语言:

yum install pango-devel pango libpng-devel cairo cairo-devel -ytar -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.xmlinit:[mkdir] Created dir: /opt/benchmarksql/benchmarksql-5.0/buildcompile:[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 warningdist:[mkdir] Created dir: /opt/benchmarksql/benchmarksql-5.0/dist[jar] Building jar: /opt/benchmarksql/benchmarksql-5.0/dist/BenchmarkSQL-5.0.jarBUILD 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

生成测试报告

使用runBenchmark.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文件是报告中包含的图片。

报告内容大致如下。

在这里插入图片描述

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

在这里插入图片描述

相关文章:

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

基于BenchmarkSQL的Oracle数据库tpcc性能测试安装BenchmarkSQL及其依赖安装软件依赖编译BenchmarkSQLBenchmarkSQL props文件配置数据库用户配置BenchmarkSQL压测装载测试数据TPC-C压测(固定事务数量)TPC-C压测(固定时长)生成测试…...

Dapr和Rainbond集成,实现云原生BaaS和模块化微服务开发

背景 Dapr 是一个开源的分布式应用运行时,帮助开发者构建松耦合的分布式应用程序,具有良好的可扩展性和可维护性。Rainbond 是一款企业级的云原生应用管理平台,提供了丰富的功能和工具,方便开发者管理和部署应用。Rainbond 和 Da…...

全国青少年信息素养大赛2023年python·选做题模拟五卷

目录 下载打印文档做题: 全国青少年电子信息智能创新大赛 python选做题模拟五卷 一、单选题 1. 对于数列3,8,11,15,17,19,25,30,44,采用“二分查找”法查找8,需要查找多少次?( ) A、5...

itop-3568开发板驱动学习笔记(18)tasklet 机制

《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记 文章目录tasklet 简介tasklet 结构体tasklet 初始化使能 tasklet失能 tasklettasklet 调度函数tasklet 取消调度函数tasklet 实验tasklet 简介 Tasklets 机制是linux中断处理机制中的软中断延迟机制。在linux中存在着…...

全国青少年电子信息智能创新大赛(复赛)python·模拟二卷

目录 编程题一 答案解析: 打印题目下载做题: 全国青少年电子信息智能创新大赛(复赛)python模拟二卷 编程题一 第一题:描述 输入两个整数,比较它们的大小。 输入 一行,包含两个整数x和y,中间用单个空格隔开。 0<= x<2^32,-2^31 <= y<2^31。 输出...

对标ChatGPT的开源中文方案

目录 前言 一、Meta发布大语言模型LLaMA 二、斯坦福基于 Meta 的 LLaMA 7B 模型微调出Alpaca 三、基于TencentPretrain训练中文LLaMA大规模语言模型 四、基于斯坦福Alpaca训练中文对话大模型BELLE 五、 清华开源项目ChatGLM中文对话模型 六、基于LLaMA的开源中文语言模型…...

9.Java面向对象----封装

Java面向对象—封装 面向对象简称 OO&#xff08;Object Oriented&#xff09;&#xff0c;20 世纪 80 年代以后&#xff0c;有了面向对象分析&#xff08;OOA&#xff09;、 面向对象设计&#xff08;OOD&#xff09;、面向对象程序设计&#xff08;OOP&#xff09;等新的系统…...

【react 全家桶】组合组件

本人大二学生一枚&#xff0c;热爱前端&#xff0c;欢迎来交流学习哦&#xff0c;一起来学习吧。 <专栏推荐> &#x1f525;&#xff1a;js专栏 &#x1f525;&#xff1a;vue专栏 &#x1f525;&#xff1a;react专栏 文章目录09 【组合组件】1.包含关系2.特例关系问题…...

VUE_学习笔记

一、 xx 二、模板语法 1.模板语法之差值语法 &#xff1a;{{ }} 主要研究&#xff1a;{{ 这里可以写什么}} 在data中声明的变量、函数等都可以。常量只要是合法的javascript表达式&#xff0c;都可以。模板表达式都被放在沙盒中&#xff0c;只能访问全局变量的一个白名单&a…...

【分布式事务AT模式 SpringCloud集成Seata框架】分布式事务框架Seata详细讲解

前言 上篇文章我们讲述了如何启动seata的本地服务&#xff0c;并且注册到nacos使用&#xff0c;这篇文章将在SpringCloud中整合Seata框架 上篇文章传送门&#xff1a;https://blog.csdn.net/Syals/article/details/130102851?spm1001.2014.3001.5501 本篇主要内容&#xff…...

系统集成项目管理工程师软考第三章习题(每天更新)

第一章指路&#xff1a;系统集成项目管理工程师软考第一章习题&#xff08;已完结&#xff09;_程序猿幼苗的博客-CSDN博客 第二章指路&#xff1a;系统集成项目管理工程师软考第二章习题&#xff08;已完结&#xff09;_程序猿幼苗的博客-CSDN博客 第3章信息系统集成专业技术…...

FIFO的工作原理及其设计

1.简介 FIFO( First Input First Output)简单说就是指先进先出。FIFO存储器是一个先入先出的双口缓冲器&#xff0c;即第一个进入其内的数据第一个被移出&#xff0c;其中一个口是存储器的输入口&#xff0c;另一个口是存储器的输出口。 对于单片FIFO来说&#xff0c;主要有两种…...

「UG/NX」Block UI 通过浏览器选择文件File Selection with Browse

目录 控件说明界面效果公有属性对话框标题 DialogLabel(仅创建)控件灰显 Enable分组 Group(仅创建)控件显隐 Show控件标题 Label国籍文本 AllowInternationalTextInput(仅创建)显示密文 IsPassword(仅创建)本地化 Localize(仅创建)保存值 RetainValue属性界面代码实现…...

面试官:如何搭建Prometheus和Grafana对业务指标进行监控?

Prometheus和Grafana都是非常流行的开源监控工具&#xff0c;可以协同使用来实现对各种应用程序、系统、网络和服务器等的监视和分析。 下面对Prometheus和Grafana进行简要介绍&#xff1a; Prometheus Prometheus是一款开源、云原生的系统和服务监控工具&#xff0c;它采用p…...

SQL Server 创建登录账号、创建用户名并为数据库赋予db_owner权限

服务器级的固定角色及其权限 sysadminsysadmin 固定服务器角色成员可以在服务器执行任何操作serveradminserveradmin 固定服务器角色的成员可以更该服务器范围的配置选项和关闭服务器sercurityadmin sercurityadmin 固定服务器角色的成员管理登录名及其属性,他们可以grant、de…...

离散数学_第二章:基本结构:集合、函数、序列、求和和矩阵(1)

集合与函数2.1 集合 2.1.1 集合的基本概念 2.1.2 集合的表示方法 2.1.3 文氏图 2.1.4 证明集合相等 2.1.5 集合的大小 ——基 2.1.6 幂集 2.1.7 集族、指标集 2.1.8 笛卡尔积 2.1.9 容斥原理2.1 集合 2.1.1 集合的基本概念 定义1&#xff1a;集合 是不同对象的一个无序的聚…...

ChatGPT想干掉开发人员,做梦去吧

很多人都发现ChatGPT可以做一些代码相关的工作&#xff0c;不仅可以写一些基础的类似python、java、js的代码段&#xff0c;还可以做一定量的调优&#xff0c;于是就开始担忧起来&#xff0c;到哪天我的开发工作会不会被ChatGPT这个工具给取代了&#xff1f; 目录 1. ChatGPT…...

尚硅谷大数据技术Hadoop教程-笔记04【Hadoop-MapReduce】

视频地址&#xff1a;尚硅谷大数据Hadoop教程&#xff08;Hadoop 3.x安装搭建到集群调优&#xff09; 尚硅谷大数据技术Hadoop教程-笔记01【大数据概论】尚硅谷大数据技术Hadoop教程-笔记02【Hadoop-入门】尚硅谷大数据技术Hadoop教程-笔记03【Hadoop-HDFS】尚硅谷大数据技术Ha…...

Linux信号sigaction / signal

Linux信号sigaction / signal 文章目录Linux信号sigaction / signal目的函数原型struct sigaction信号枚举值ISO C99 signals.Historical signals specified by POSIX.New(er) POSIX signals (1003.1-2008, 1003.1-2013).Nonstandard signals found in all modern POSIX system…...

坦克大战第一阶段代码

package tanke.game;import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.Vector;//为了监听键盘事件&#xff0c;实现keylistener public class mypanel extends JPanel implements KeyListener …...

vue新手福音:快马ai帮你秒建可运行环境,专注学习第一行代码

作为一个刚接触Vue的新手&#xff0c;最让我头疼的就是环境搭建。记得第一次尝试安装Node.js、配置npm、理解脚手架的时候&#xff0c;光是解决各种报错就花了大半天时间。直到发现了InsCode(快马)平台&#xff0c;才明白原来入门可以这么简单。 环境搭建的痛点 传统方式需要先…...

手把手教你用4090D单卡24G显存本地跑DeepSeek-R1:KTransformers保姆级安装与避坑指南

手把手教你用4090D单卡24G显存本地跑DeepSeek-R1&#xff1a;KTransformers保姆级安装与避坑指南 最近在折腾大模型本地部署的朋友们&#xff0c;应该都听说过DeepSeek-R1这个671B参数的"巨无霸"。传统认知里&#xff0c;这种规模的模型至少需要专业级GPU集群才能跑起…...

5步构建智能医疗预约系统:91160-cli全流程实战指南

5步构建智能医疗预约系统&#xff1a;91160-cli全流程实战指南 【免费下载链接】91160-cli 健康160全自动挂号脚本 项目地址: https://gitcode.com/gh_mirrors/91/91160-cli 医疗资源紧张导致的挂号难题&#xff0c;让无数患者在凌晨守候却依然一号难求。如何突破人工抢…...

跨模态迁移学习在超声目标检测中的落地实践(附乳腺超声数据集处理技巧)

跨模态迁移学习在医学超声检测中的实战指南&#xff1a;从自然图像到乳腺超声的模型迁移 医学影像分析领域长期面临标注数据稀缺的困境&#xff0c;尤其对于超声影像这类高度依赖操作者经验的模态。当我在去年参与一个乳腺癌早期筛查项目时&#xff0c;团队仅能获取到200例标注…...

【大模型】-名词手册-扫盲

写在前面 本篇文章用来记录在了解学习大模型的过程中遇到的一些名词缩写&#xff0c;好记性不如烂笔头&#xff0c;记录下来&#xff0c;也供大家参考。如有不正确的&#xff0c;欢迎指正。 目录写在前面名词扫盲写在后面名词扫盲 分类缩写英文全程中文备注-----智能体通信协议…...

MXNet多语言生态:Python到Java/C++的跨平台部署

MXNet多语言生态&#xff1a;Python到Java/C的跨平台部署 文章详细介绍了MXNet深度学习框架的多语言支持能力&#xff0c;重点阐述了从Python训练环境到Java/C生产环境的完整部署流程。内容涵盖Python API的深度使用指南&#xff0c;包括NDArray高效张量计算、Symbolic编程的计…...

AMFITRACK Gen3开发套件开箱测评:如何用电磁追踪技术搞定VR定位难题?

AMFITRACK Gen3开发套件深度评测&#xff1a;电磁追踪如何重塑VR定位体验 拆开AMFITRACK Gen3开发套件的包装箱时&#xff0c;那种精密仪器特有的金属质感立刻传递到指尖。作为第三代电磁运动跟踪系统的代表&#xff0c;这套设备正在挑战VR领域沿用多年的光学定位霸权。不同于需…...

毕业季、返修季、投稿季:SCI论文润色,到底能不能提高接收率?

“SCI论文如果先润色&#xff0c;再投稿&#xff0c;是不是更容易被接收&#xff1f;”这个问题&#xff0c;真的每年到了这个时间点都会高频出现。尤其是3月底到4月初&#xff0c;很多同学刚从基金申请、毕业论文、返修修改的高压节奏里缓过来&#xff0c;马上又进入下一轮“赶…...

如何在Java中使用Thread创建线程

在Java中使用Thread类创建线程是一种常见而直接的方式。你可以继承Thread类并重写其run()定义线程执行的任务的方法。当调用线程对象时start()JVM将为该线程分配资源并自动执行该方法run()方法中的代码。继承Thread类&#xff0c;重写run方法创建线程的第一步是定义一个类继承T…...

LFM2.5-1.2B-Thinking-GGUF多轮对话效果展示:复杂任务规划与分解

LFM2.5-1.2B-Thinking-GGUF多轮对话效果展示&#xff1a;复杂任务规划与分解 1. 开场亮点 当被问到"帮我策划一次团队建设活动"时&#xff0c;LFM2.5-1.2B-Thinking-GGUF模型展现出了令人惊喜的"思考"能力。不同于简单的一问一答&#xff0c;这个模型能够…...