- tpc:
- pgbench: 是 postgresql 自带的,基于 tpc-b 模型的测试工具,在每个事务中涉及五个 select 、 update 以及 insert 命令,也可以自行编写脚本,按自己的需求对数据库进行性能压力测试。tpc-b 根据系统每秒可以执行多少事务来衡量吞吐量,可以看作是一种数据库压力测试。(已于 95 年 6 月 6 日废弃)
- benchmarksql: 基于 tpc-c 模型的测试工具,tpc-c是以每分钟事务数 (tpmc) 来衡量在线事务处理(oltp)的基准,它可以衡量数据库的性能,也可以衡量硬件性价比,也是广泛应用并关注的一种c/s环境测试模型。tpc-c模型是以一个在线零售业为例,设计的一种模型。具体架构如下所示:
图中9个实体对应了tpc-c测试中9个数据表,也对应批发模型中参与的对象。warehouse是仓库,district是区域,每个仓库为10个区域提供商品批发,customer是客户,每个区域有3千个客户,每个客户会产生至少1个订单,每个订单又分为new-order和order-line两部分,new-order是用来标识订单是否为新订单,在完成订单的发货操作后,new-order中的记录将被删除,order-line是订单中进行批发的商品订购流水,每个订单有5到10个交易商品。stock是用来记录warehouse的库存情况,item是记录warehouse中所存储的商品。
1. 工具下载
benchmarksql-5.0 下载地址:
htop 下载地址:
r 语言下载地址:
postgresql客户端jdbc连接驱动 下载地址:
2. 安装
# 安装所需系统包
[root@pgtest3 ~]# yum install -y gcc glibc-headers gcc-c gcc-gfortran readline-devel libxt-devel pcre-devel libcurl libcurl-devel ncurses ncurses-devel autoconf automake zlib zlib-devel bzip2 bzip2-devel xz-devel java-1.8.0-openjdk ant
# 安装r语言(generatereport.sh脚本需要) 使r语言支持png图片,否则报告生成有问题
[root@pgtest3 ~]# yum install -y pango-devel pango libpng-devel cairo cairo-devel
[root@pgtest3 ~]# cd /enmo/soft/
[root@pgtest3 soft]# tar -zxf r-3.6.3.tar.gz
[root@pgtest3 soft]# cd r-3.6.3
[root@pgtest3 r-3.6.3]# ./configure && make && make install
# 安装htop监控工具
[root@pgtest3 ~]# cd /enmo/soft/
[root@pgtest3 soft]# tar -zxvf htop-3.0.5.tar.gz
[root@pgtest3 soft]# cd htop-3.0.5
[root@pgtest3 htop-3.0.5]# ./autogen.sh && ./configure && make && make install
# 检查安装情况(java/ant/htop)
[root@pgtest3 ~]# ant -version
apache ant(tm) version 1.9.2 compiled on june 10 2014
[root@pgtest3 ~]# java -version
openjdk version "1.8.0_131"
openjdk runtime environment (build 1.8.0_131-b12)
openjdk 64-bit server vm (build 25.131-b12, mixed mode)
[root@pgtest3 ~]# r --version
r version 3.6.3 (2020-02-29) -- "holding the windsock"
米乐app官网下载 copyright (c) 2020 the r foundation for statistical computing
platform: x86_64-pc-linux-gnu (64-bit)
# 解压软件及jdbc驱动
[root@pgtest3 ~]# unzip /enmo/soft/benchmarksql-5.0.zip -d /enmo/app/
# 替换默认的postgresql驱动
[root@pgtest3 ~]# mv /enmo/app/benchmarksql-5.0/lib/postgres/postgresql-9.3-1102.jdbc41.jar /enmo/app/benchmarksql-5.0/lib/postgres/postgresql-9.3-1102.jdbc41.jar.bak
[root@pgtest3 ~]# cp /enmo/soft/postgresql-42.2.20.jar /enmo/app/benchmarksql-5.0/lib/postgres/postgresql.jar
# 使用ant编译
[root@pgtest3 ~]# cd /enmo/app/benchmarksql-5.0
[root@pgtest3 benchmarksql-5.0]# ant
buildfile: /enmo/app/benchmarksql-5.0/build.xml
init:
[mkdir] created dir: /enmo/app/benchmarksql-5.0/build
compile:
[javac] compiling 11 source files to /enmo/app/benchmarksql-5.0/build
dist:
[mkdir] created dir: /enmo/app/benchmarksql-5.0/dist
[jar] building jar: /enmo/app/benchmarksql-5.0/dist/benchmarksql-5.0.jar
build successful
total time: 1 second
3. 配置props文件(配置文件切忌多余空格,否则会出现各种错误)
配置说明
# 数据库类型,postgres代表我们对pg数据库进行测试,它支持的数据库包括postgresql/enterprisedb、db2、oracle、sql server和mysql。
db=postgres
# 驱动
driver=org.postgresql.driver
# 修改连接字符串, 包含ip、端口号、数据库 https://jdbc.postgresql.org/documentation/head/connect.html
conn=jdbc:postgresql://192.168.0.11:26000/benchmarksql?preparethreshold=1&batchmode=on&fetchsize=10
# 设置数据库登录用户和密码。
user=bench
password=gauss@123
# 仓库数,每个warehouse的数据量大小约为76823.04kb
warehouses=20
# 用于在数据库中初始化数据的加载进程数量,默认为4 (建议填写cpu核数)
loadworkers=4
# 终端数,即:并发客户端数量, 跟服务端最大work数对应,通常设置为cpu线程总数的2~6倍
terminals=6
# 每个终端(terminal)运行的固定事务数量,当该参数为非0时,runmins参数必须等于零
runtxnsperterminal=0
# 要运行指定的分钟,当该参数为非0时,runtxnsperterminal必须等于零
runmins=5
# 每分钟总事务数
limittxnspermin=0
# 在4.x兼容模式下运行时,设置为true。设置为false以均匀使用整个配置的数据库。
terminalwarehousefixed=false
# 以下五个值相加之和为100 (45、43、4、4和4的默认百分比与tpc-c规范匹配)
neworderweight=45
paymentweight=43
orderstatusweight=4
deliveryweight=4
stocklevelweight=4
# 测试数据生成目录,默认无需修改,默认生成在run目录下面,名字形如my_result_xxxx的文件夹
resultdirectory=my_result_%ty-%tm-%td_%th%tm%ts
# 操作系统性能收集脚本,默认无需修改,需要操作系统具备有python2环境
oscollectorscript=./misc/os_collector_linux.py
# 操作系统收集操作间隔,默认为1秒
oscollectorinterval=1
# 操作系统收集所对应的主机,如果对本机数据库进行测试,该参数保持注销即可,如果要对远程服务器进行测试,请填写用户名和主机名
//oscollectorsshaddr=omm@192.168.0.11
# 操作系统中被收集服务器的网卡名称和磁盘名称
oscollectordevices=net_eth0 blk_vda
配置示例
[root@pgtest3 ~]# vi /enmo/app/benchmarksql-5.0/run/props.postgresql.5432
db=postgres
driver=org.postgresql.driver
conn=jdbc:postgresql://192.168.58.10:5432/benchmarksql?applicationname=benchmark
user=benchmarksql
password=changeme
warehouses=20
loadworkers=4
terminals=6
runtxnsperterminal=0
runmins=2
limittxnspermin=0
terminalwarehousefixed=false
neworderweight=45
paymentweight=43
orderstatusweight=4
deliveryweight=4
stocklevelweight=4
[root@pgtest3 ~]# vi /enmo/app/benchmarksql-5.0/run/props.postgresql.5000
db=postgres
driver=org.postgresql.driver
conn=jdbc:postgresql://192.168.58.20:5000/benchmarksql?applicationname=benchmark
user=benchmarksql
password=changeme
warehouses=20
loadworkers=4
terminals=6
runtxnsperterminal=0
runmins=2
limittxnspermin=0
terminalwarehousefixed=false
neworderweight=45
paymentweight=43
orderstatusweight=4
deliveryweight=4
stocklevelweight=4
4. 自定义创建表(可选)
例如,配置tablecreates.sql脚本,调整表的表空间分布(充分利用多块磁盘的io)
# vi /opt/benchmarksql-5.0/run/sql.common/tablecreates.sql
------------------------------------------------------------
create tablespace tbs1 location '/gauss/data/tbs1';
create tablespace tbs2 location '/gauss/data/tbs2';
create table bmsql_config (
cfg_name varchar(30) primary key,
cfg_value varchar(50)
);
5. 服务器配置互信(可选)
如果不是针对本机测试且配置了参数oscollectorsshaddr,则需要配置与数据库服务器的ssh互信。
# ssh-keygen -t rsa
# ssh-copy-id postgres@192.168.58.10
# ssh-copy-id postgres@192.168.58.11
# ssh-copy-id postgres@192.168.58.12
6. 配置postgresql数据库
# 创建测试用户和数据库
postgres=# create user benchmarksql with encrypted password 'changeme';
postgres=# create database benchmarksql owner benchmarksql;
# 确保放开连接权限
# vi pg_hba.conf
host all all 192.168.58.0/24 md5
# cat postgresql.auto.conf
listen_addresses = '*'
port = 5432
7. benchmarksql导入测试数据
[root@pgtest3 ~]# cd /enmo/app/benchmarksql-5.0/run
# 执行前,请务必将props.postgresql.1000w文件的所有注释和多余空格删除,否则可能报错
[root@pgtest3 run]# ./rundatabasebuild.sh props.postgresql.5432
8. benchmarksql运行tpcc测试
[root@pgtest3 ~]# cd /opt/benchmarksql-5.0/run
[root@pgtest3 run]# ./runbenchmark.sh props.postgresql.5432
[root@pgtest3 run]# ./runbenchmark.sh props.postgresql.5000
# benchmarksql修改参数后重新运行tpcc测试
# ./rundatabasedestroy.sh props.postgresql.5432
# ./rundatabasebuild.sh props.postgresql.5432
# ./runbenchmark.sh props.postgresql.5432
9. runbenchmark.sh运行结果
[root@pgtest3 run]# ./runbenchmark.sh props.postgresql.5432
term-00, running average tpmtotal: 24834.29 current tpmtotal: 1641864 memory usage: 22mb / 55mb
13:46:06,206 [thread-4] info jtpcc : term-00,
13:46:06,207 [thread-4] info jtpcc : term-00,
13:46:06,207 [thread-4] info jtpcc : term-00, measured tpmc (neworders) = 11169.22
13:46:06,207 [thread-4] info jtpcc : term-00, measured tpmtotal = 24833.05
13:46:06,207 [thread-4] info jtpcc : term-00, session start = 2021-11-04 13:36:06
13:46:06,208 [thread-4] info jtpcc : term-00, session end = 2021-11-04 13:46:06
13:46:06,208 [thread-4] info jtpcc : term-00, transaction count = 248349
[root@pgtest3 run]# ./runbenchmark.sh props.postgresql.5000
term-00, running average tpmtotal: 21077.55 current tpmtotal: 1385688 memory usage: 15mb / 55mb
14:02:16,373 [thread-2] info jtpcc : term-00,
14:02:16,374 [thread-2] info jtpcc : term-00,
14:02:16,374 [thread-2] info jtpcc : term-00, measured tpmc (neworders) = 9543.71
14:02:16,374 [thread-2] info jtpcc : term-00, measured tpmtotal = 21076.02
14:02:16,374 [thread-2] info jtpcc : term-00, session start = 2021-11-04 13:52:16
14:02:16,374 [thread-2] info jtpcc : term-00, session end = 2021-11-04 14:02:16
14:02:16,374 [thread-2] info jtpcc : term-00, transaction count = 210781
10. html报告查看
# 检查r语言是否支持png
# r
> capabilities()
jpeg png tiff tcltk x11 aqua
false true false false false false
http/ftp sockets libxml fifo cledit iconv
true true true true true true
nls profmem cairo icu long.double libcurl
true false true true true true
# 生成html报告
[root@pgtest3 run]# ./generatereport.sh my_result_2021-01-19_145218/
[root@pgtest3 ~]# ls /enmo/app/benchmarksql-5.0/run/my_result_2021-01-19_145218
pgbench 不需要安装,postgresql自带了。
1. 创建用户和数据库
postgres=# create user pgbench with encrypted password 'pgbench';
postgres=# create database pgbench owner pgbench;
2. 初始化数据
$ pgbench -h 192.168.58.10 -p 5432 -u pgbench -d pgbench -i -s 2 -f 80 --partitions=20
2. 只读测试
$ pgbench -h 192.168.58.20 -p 5001 -u pgbench -d pgbench -p 2 -t 600 -s -c 200 -j 10
3. tpcb-like测试
$ pgbench -h 192.168.58.10 -p 5432 -u pgbench -d pgbench -p 2 -t 600 -b tpcb-like -c 200 -j 2
4. tpcb-like和simple-update按比例测试
$ pgbench -h 192.168.58.20 -p 5000 -u pgbench -d pgbench -p 2 -t 60 -b simple-update@2 -b tpcb-like@8 -c 200 -j 2
最后修改时间:2021-11-05 09:46:31
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【米乐app官网下载的版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。