热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PostgreSQL基准测试工具benchmarksql和pgbench

PostgreSQL基准测试工具benchmarks

简单介绍

  • TPC: http://tpc.org/default5.asp

  • pgbench: 是 PostgreSQL 自带的,基于 TPC-B 模型的测试工具,在每个事务中涉及五个 SELECT 、 UPDATE 以及 INSERT 命令,也可以自行编写脚本,按自己的需求对数据库进行性能压力测试。TPC-B 根据系统每秒可以执行多少事务来衡量吞吐量,可以看作是一种数据库压力测试。(已于 95 年 6 月 6 日废弃)

  • benchmarksql: 基于 TPC-C 模型的测试工具,TPC-C是以每分钟事务数 (tpmC) 来衡量在线事务处理(OLTP)的基准,它可以衡量数据库的性能,也可以衡量硬件性价比,也是广泛应用并关注的一种C/S环境测试模型。TPC-C模型是以一个在线零售业为例,设计的一种模型。具体架构如下所示:

    tpcc.png

    图中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中所存储的商品。


benchmarksql 的简单使用

1. 工具下载

benchmarksql-5.0 下载地址: https://udomain.dl.sourceforge.net/project/benchmarksql/benchmarksql-5.0.zip

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

PostgreSQL客户端JDBC连接驱动 下载地址:https://jdbc.postgresql.org/download.html


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"
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

image.png

image.png


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 的简单使用

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


推荐阅读
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
author-avatar
MC红石粉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有