会议响应式网站开发,区块链技术开发,编程型网页制作工具,uc搜索引擎入口一、前言
本文提供openGauss使用BenchmarkSQL进行性能测试的方法和测试数据报告。
BenchmarkSQL#xff0c;一个JDBC基准测试工具#xff0c;内嵌了TPC-C测试脚本#xff0c;支持很多数据库#xff0c;如PostgreSQL、Oracle和Mysql等。
TPC-C是专门针对联机交易处理系统…一、前言
本文提供openGauss使用BenchmarkSQL进行性能测试的方法和测试数据报告。
BenchmarkSQL一个JDBC基准测试工具内嵌了TPC-C测试脚本支持很多数据库如PostgreSQL、Oracle和Mysql等。
TPC-C是专门针对联机交易处理系统OLTP系统的规范一般情况下我们也把这类系统称为业务处理系统。几乎所有在OLTP市场提供软硬平台的国外主流厂商都发布了相应的TPC-C测试结果随着计算机技术的不断发展这些测试结果也在不断刷新。
二、TPC-C 标准测试概述
1.模拟 5 种事务处理
1新订单New-Order事务内容对于任意一个客户端,从固定的仓库随机选取 5-15 件商品,创建新订单.其中 1%的订单要由假想的用户操作失败而回滚。主要特点中量级、读写频繁、要求响应快
2支付操作(Payment)事务内容对于任意一个客户端,从固定的仓库随机选取一个辖区及其内用户,采用随机的金额支付一笔订单,并作相应历史纪录。主要特点轻量级读写频繁要求响应快
3订单状态查询(Order-Status)事务内容对于任意一个客户端,从固定的仓库随机选取一个辖区及其内用户,读取其最后一条订单,显示订单内每件商品的状态。主要特点中量级只读频率低要求响应快
4发货(Delivery): 事务内容对于任意一个客户端,随机选取一个发货包,更新被处理订单的用户余额,并把该订单从新订单中删除。(主要特点1-10 个批量读写频率低较宽松的响应时间)
5库存状态查询(Stock-Level):事务内容对于任意一个客户端,从固定的仓库和辖区随机选取最后 20 条订单,查看订单中所有的货物的库存,计算并显示所有库存低于随机生成域值的商品数量。主要特点重量级,只读频率低,较宽松的响应时间 每个Warehouse数据量约为76823.04KB
2.TPC-C 测试指标
TPC-C测试的结果主要有两个指标即流量指标Throughput,简称tpmC)和性价比Price/Performance,简称Price/tpmC)。
1流量指标(Throughput,简称tpmC) 按照TPC组织的定义流量指标描述了系统在执行支付操作、订单状态查询、发货和库存状态查询这4种交易的同时每分钟可以处理多少个新订单交易。所有交易的响应时间必须满 足TPC-C测试规范的要求且各种交易数量所占的比例也应该满足TPC-C测试规范的要求。在这种情况下流量指标值越大说明系统的联机事务处理能力越高。
2性价比Price/Performance,简称Price/tpmc) 即测试系统的整体价格与流量指标的比值在获得相同的tpmC值的情况下价格越低越好。 做TPC-C测试的目的主要有两点
1贴近生产环境进行实际操作TPC-C可以提供类似这样的环境。
2通过TPC-C测试结果可以清晰的了解数据库的性能等信息。
三、环境介绍
1.服务器信息 主机IP 配置 操作系统 描述 192.168.52.3 1c/4GB/30GB CentOS Linux release 7.6.1810 (Core) DB服务器 192.168.52.4 1c/2GB/20GB CentOS Linux release 7.9.2009 (Core) BenchmarkSQL服务器 2.软件信息 软件名称 版本 描述 openGauss 3.1.1 关系型(开源)数据库 BenchmarkSQL 5.0 一个JDBC基准测试工具内嵌了TPC-C测试脚本支持很多数据库如PostgreSQL、Oracle和Mysql等。 TPC-C是专门针对联机交易处理系统OLTP系统的规范一般情况下我们也把这类系统称为业务处理系统。 几乎所有在OLTP市场提供软硬平台的国外主流厂商都发布了相应的TPC-C测试结果 随着计算机技术的不断发展这些测试结果也在不断刷新。 JDK java-1.8.0-openjdk Java开发工具包它包含了Java开发所需的所有核心组件和工具。JDK是构建Java应用程序、Java平台和Java Web服务的基础。 R语言 3.6.3 R语言(generateReport.sh脚本需要) 支持png报告图片生成 htop 3.3.0 htop 是一个交互式的进程监控工具主要用于查看和管理运行中的进程。 它以用户友好的方式显示进程列表包括进程的 CPU、内存和交换空间使用情况以及进程树结构。 htop 允许你通过键盘快捷键来进行排序、搜索、终止进程等操作。 htop 提供了颜色和动态更新的界面更直观地显示资源使用情况。 htop 适合实时查看和管理运行中的进程特别是在终端环境中。 ant Apache Ant(TM) version 1.9.4 一个用于自动化构建过程的工具。它主要用于Java应用程序但也可以用于其他类型的项目。Ant使用XML文件通常称为build.xml来描述构建过程包括编译源代码、运行测试、打包应用程序等任务。 python 2.7.5 数据库服务器BenchmarkSQL对应的python版本不能过高否则存在兼容性报错 四、配置BenchmarkSQL主机
1. 根据官方文档安装必要的软件包 配置YUM源
(若仅使用华为云内网的YUM源(http://mirrors.myhuaweicloud.com/repo/CentOS-Base-7.repo)会造成软件版本依赖问题)
## 配置华为YUM源
mkdir -p /etc/yum.repos.d/repo_bak/
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo_bak/
wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo## 配置Epel源
yum remove -y epel-release
yum install -y https://repo.huaweicloud.com/epel/epel-release-latest-7.noarch.rpm
cd /etc/yum.repos.d/
rm -rf epel-testing.reposed -i s/#baseurl/baseurl/g /etc/yum.repos.d/epel.repo
sed -i s/mirrorlist/#mirrorlist/g /etc/yum.repos.d/epel.repo
sed -i shttp://download.fedoraproject.org/pubhttps://repo.huaweicloud.comg /etc/yum.repos.d/epel.repo## 顺刷新缓存
yum clean all
yum makecache
yum repolist all 安装依赖软件包
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语言generateReport.sh脚本需要
yum install pango-devel pango libpng-devel cairo cairo-devel ## 使R语言支持png图片否则报告生成有问题
wget https://mirror.bjtu.edu.cn/cran/src/base/R-3/R-3.6.3.tar.gz
tar -zxf R-3.6.3.tar.gz
cd R-3.6.3
./configure make make install## 如果需要重新安装请参考以下步骤 ##
make uninstall
./configure
make
make install 编译安装htop(服务器端和客户端都安装)
xz –d htop-3.3.0.tar.xz
tar xvf htop-3.3.0.tar
cd htop-3.0.5
./autogen.sh ./configure make make install 检查安装情况java/ant/htop
[rootlocalhost ~]# ant -version
Apache Ant(TM) version 1.9.4 compiled on November 5 2018[rootlocalhost ~]# java -version
openjdk version 1.8.0_402
OpenJDK Runtime Environment (build 1.8.0_402-b06)
OpenJDK 64-Bit Server VM (build 25.402-b06, mixed mode)[rootlocalhost ~]# htop --version
htop 3.3.0[rootlocalhost ~]# R --version
R version 3.6.0 (2019-04-26) -- Planting of a Tree
Copyright (C) 2019 The R Foundation for Statistical Computing
Platform: x86_64-redhat-linux-gnu (64-bit)
2. 准备软件 解压软件及JDBC驱动解压对应的软件包
unzip benchmarksql-5.0.zip
tar -zxvf openGauss-1.1.0-JDBC.tar.gz 替换默认的postgresql驱动
cd /root/soft/benchmarksql-5.0/lib/postgres/
mv postgresql-9.3-1102.jdbc41.jar postgresql-9.3-1102.jdbc41.jar.bak
mv /soft/postgresql.jar . 使用ant编译
cd /root/soft/benchmarksql-5.0/
[rootlocalhost benchmarksql-5.0]# ant
Buildfile: /root/soft/benchmarksql-5.0/build.xmlinit:[mkdir] Created dir: /root/soft/benchmarksql-5.0/buildcompile:[javac] Compiling 11 source files to /root/soft/benchmarksql-5.0/builddist:[mkdir] Created dir: /root/soft/benchmarksql-5.0/dist[jar] Building jar: /root/soft/benchmarksql-5.0/dist/BenchmarkSQL-5.0.jarBUILD SUCCESSFUL
Total time: 2 seconds
3. 配置软件 配置props文件(配置文件切忌多余空格否则会出现各种错误)
说明进入run目录会看到多个不同后缀名的props文件不同的文件配置不同的数据库由于我们需要压测postgresql和openGaussopenGauss兼容postgresql需要配置props.pg文件。cp props.pg props.opengauss在配置文件中需要修改的包括conn,user, password(这三项用于连接指定的数据库因此需要提前在postgresql中创建好对应的DB以及用户)
cd /root/soft/benchmarksql-5.0/run
[rootlocalhost run]# cp props.pg props.openGauss
[rootlocalhost run]# vi props.openGauss
dbpostgres
driverorg.postgresql.Driver
connjdbc:postgresql://192.168.52.3:26000/tpcc
userbenchmarksql
passwordPssw0rdabc
warehouses2
loadWorkers4
terminals2
runTxnsPerTerminal0
runMins5
limitTxnsPerMin0
terminalWarehouseFixedfalse
newOrderWeight45
paymentWeight43
orderStatusWeight4
deliveryWeight4
stockLevelWeight4
resultDirectorymy_result_%tY-%tm-%td_%tH%tM%tS
osCollectorScript./misc/os_collector_linux.py
osCollectorInterval1
osCollectorSSHAddrroot192.168.52.3
osCollectorDevicesnet_ens33 blk_sda注释
dbpostgres 指定数据库类型当前类型为postgres
driverorg.postgresql.Driver postgres数据库的JDBC驱动
connjdbc:postgresql://192.168.1.71:5496/benchmarksql postgres的连接字符串格式为connjdbc:postgresql://IP:端口/库名
userbenchmarksql 连接postgres的用户名
passwordPostgreSQL5432 连接postgres的用户名的密码
warehouses1 仓库数量每个warehouse数据量大概在100MB左右那么数据库大小为1000MB左右默认1个仓库
loadWorkers4 数据库初始化数据时候的进程数默认4个load加载进程
terminals1 指定终端数量默认1个终端
runTxnsPerTerminal10 指定压测每个终端执行的事务数量。如果该参数配置为非0时下面的runMins参数必须设置为0
runMins0 指定压测的时长单位分钟。如果该值设置为非0值时runTxnsPerTerminal参数必须设置为0。
limitTxnsPerMin300 每分钟事务总数限制该参数主要控制每分钟处理的事务数事务数受terminals参数的影响limitTxnsPerMin/terminals的值必须是正整数。
terminalWarehouseFixedtrue 终端和仓库的绑定模式设置为true时可以运行4.x兼容模式意思为每个终端都有一个固定的仓库。设置为false时可以均匀的使用数据库整体配置。TPCC规定每个终端都必须有一个绑定的仓库所以一般使用默认值true。
下面五个值的总和必须等于100默认值为45, 43, 4, 44 与TPC-C测试定义的比例一致实际操作过程中可以调整比重来适应各种场景。
newOrderWeight45 新订单事务占总事务的45%
paymentWeight43 支付订单事务占总事务的43%
orderStatusWeight4 订单状态事务占总事务的4%
deliveryWeight4 到货日期事务占总事务的4%
stockLevelWeight4 查看现存货品的事务占总事务的4%resultDirectorymy_result_%tY-%tm-%td_%tH%tM%tS 压测期间收集系统性能数据的目录无需修改
osCollectorScript./misc/os_collector_linux.py 操作系统性能收集脚本无需修改
osCollectorInterval1 操作系统收集操作间隔默认为1秒
osCollectorSSHAddruserdbhost 需要收集系统性能的主机
osCollectorDevicesnet_eth0 blk_sda 操作系统中被收集服务器的网卡名称和磁盘名称根据个人环境进行调整 配置tableCreates.sql脚本可适当调整表的表空间分布充分利用多块磁盘的IO)
cd /root/soft/benchmarksql-5.0/run/sql.common
[rootlocalhost sql.common]# cp tableCreates.sql tableCreates.sql.bak
[rootlocalhost sql.common]# vi tableCreates.sql
--CREATE TABLESPACE tbs1 location /home/omm/data/tbs1;
--CREATE TABLESPACE tbs2 location /home/omm/data/tbs2;create table bmsql_config (cfg_name varchar(30) primary key,cfg_value varchar(50)
);create table bmsql_warehouse (w_id integer not null,w_ytd decimal(12,2),w_tax decimal(4,4),w_name varchar(10),w_street_1 varchar(20),w_street_2 varchar(20),w_city varchar(20),w_state char(2),w_zip char(9)
);create table bmsql_district (d_w_id integer not null,d_id integer not null,d_ytd decimal(12,2),d_tax decimal(4,4),d_next_o_id integer,d_name varchar(10),d_street_1 varchar(20),d_street_2 varchar(20),d_city varchar(20),d_state char(2),d_zip char(9)
);create table bmsql_customer (c_w_id integer not null,c_d_id integer not null,c_id integer not null,c_discount decimal(4,4),c_credit char(2),c_last varchar(16),c_first varchar(16),c_credit_lim decimal(12,2),c_balance decimal(12,2),c_ytd_payment decimal(12,2),c_payment_cnt integer,c_delivery_cnt integer,c_street_1 varchar(20),c_street_2 varchar(20),c_city varchar(20),c_state char(2),c_zip char(9),c_phone char(16),c_since timestamp,c_middle char(2),c_data varchar(500)
);create sequence bmsql_hist_id_seq;create table bmsql_history (hist_id integer,h_c_id integer,h_c_d_id integer,h_c_w_id integer,h_d_id integer,h_w_id integer,h_date timestamp,h_amount decimal(6,2),h_data varchar(24)
);create table bmsql_new_order (no_w_id integer not null,no_d_id integer not null,no_o_id integer not null
);create table bmsql_oorder (o_w_id integer not null,o_d_id integer not null,o_id integer not null,o_c_id integer,o_carrier_id integer,o_ol_cnt integer,o_all_local integer,o_entry_d timestamp
);create table bmsql_order_line (ol_w_id integer not null,ol_d_id integer not null,ol_o_id integer not null,ol_number integer not null,ol_i_id integer not null,ol_delivery_d timestamp,ol_amount decimal(6,2),ol_supply_w_id integer,ol_quantity integer,ol_dist_info char(24)
);create table bmsql_item (i_id integer not null,i_name varchar(24),i_price decimal(5,2),i_data varchar(50),i_im_id integer
);create table bmsql_stock (s_w_id integer not null,s_i_id integer not null,s_quantity integer,s_ytd integer,s_order_cnt integer,s_remote_cnt integer,s_data varchar(50),s_dist_01 char(24),s_dist_02 char(24),s_dist_03 char(24),s_dist_04 char(24),s_dist_05 char(24),s_dist_06 char(24),s_dist_07 char(24),s_dist_08 char(24),s_dist_09 char(24),s_dist_10 char(24)
); 配置与数据库服务器的ssh互信
执行如下命令行
ssh-keygen -t rsa
ssh-copy-id root192.168.52.3 #passwordPssw0rd123
五、配置openGauss DB主机
1. 创建数据库及用户(与前面props.openGauss文件配置保持一致)
[rootnode1 ~]# su omm
[ommnode1 root]$ gsql -d postgres -p 26000 -ar
openGauss# create user benchmarksql with sysadmin identified by Pssw0rdabc;
CREATE ROLE
openGauss# create database tpcc owner benchmarksql encodingUTF8;
CREATE DATABASE
2. 配置pg_hba.conf
[ommprod ~]$ gs_guc reload -N all -I all -h host tpcc benchmarksql 192.168.52.4/32 sha256
/gaussdb/data/db1/pg_hba.conf 3. 备份数据目录测试完毕后可以快速恢复
[ommnode1 ~]$ gs_ctl stop -D /gaussdb/data/db1
[ommnode1 ~]$ cp -r /gaussdb/data/db1 /gaussdb/data/db1_bak
[ommnode1 ~]$ gs_ctl start -D /gaussdb/data/db1
下一篇我们将分享发起测试及测试结果~