[原创]使用benchmarksql和pgbench对PostgreSQL Plus Advanced Server进行性能测试
一、测试环境
benchmarksql version:4.0.8
rhel 6.3
vmware esxi
二、理解benchmarksql性能测试原理TPC-C
1、理解TPC-C
TPC-C模拟一个批发商的货物管理环境。该批发公司有N个仓库,每个仓库供应10个地区,其中每个地区为3000名顾客服务。在每个仓库中有10个终端,每一个终端用于一个地区。在运行时,10×N个终端操作员向公司的数据库发出5类请求。由于一个仓库中不可能存储公司所有的货物,有一些请求必须发往其它仓库,因此,数据库在逻辑上是分布的。N是一个可变参数,测试者可以随意改变N,以获得最佳测试效果。
TPC-C使用三种性能和价格度量,其中性能由TPC-C吞吐率衡量,单位是tpmC。tpm是transactions
per
minute的简称;C指TPC中的C基准程序。它的定义是每分钟内系统处理的新订单个数。要注意的是,在处理新订单的同时,系统还要按表1的要求处理其它4类事务
请求。从表1可以看出,新订单请求不可能超出全部事务请求的45%,因此,当一个系统的性能为1000tpmC时,它每分钟实际处理的请求数是2000多个。价格是指系统的总价格,单位是美元,而价格性能比则定义为总价格÷性能,单位是$/tpmC。
tpmC定义:
TPC-C的吞吐量,按有效TPC-C配置期间每分钟处理的平均交易次数测量,至少要运行12分钟。(吞吐量测试结果以比特/秒或字节/秒表示。)
这里还有一篇文章介绍的很详细:
http://blog.sina.com.cn/s/blog_4485748101019wsh.html
2、benchmarksql参数设置
批发公司的N个仓库,默认为1
warehouses=1
每个仓库中的终端数
terminals=1
//To run specified
transactions per terminal- runMins must equal zero
每终端执行的事务数,如果启用它,就必须将runMins设置为0
runTxnsPerTerminal=10
//To run for specified
minutes- runTxnsPerTerminal must equal zero
终端执行时间,如果启用它,就必须设置runTxnsPerTerminal为0
runMins=0
//Number of total
transactions per minute
limitTxnsPerMin=300
//The following five
values must add up to 100
//The default
percentages of 45, 43, 4, 4 & 4 match the TPC-C spec
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
二、PPAS测试
PPAS version:PostgreSQL
Plus Advanced Server 9.2
1、修改驱动及数据库用户名和密码:
[root@dbserver ~]# cp
/opt/benchmarksql-4.0.8/run/props.pg
/opt/benchmarksql-4.0.8/run/props.pg.bak
[root@dbserver ~]# vim
/opt/benchmarksql-4.0.8/run/props.pg
driver=com.edb.Driver
conn=jdbc:edb://localhost:5444/edb
user=benchmarksql
password=000000
2、复制EDB的JDBC驱动到benchmarksql的lib目录
[root@dbserver ~]# cp
/opt/PostgresPlus/9.2AS/connectors/jdbc/edb-jdbc16.jar
/opt/benchmarksql-4.0.8/lib/
3、修改benchmarksql的执行脚本
默认的,benchmarksql的执行脚本都是使用PostgreSQL驱动,因为我们这里要测试的是PPAS,所以首先将执行脚本中的驱动全部修改为EDB的驱动:
[root@dbserver ~]# vim
/opt/benchmarksql_ora/run/runSQL.sh
将脚本中的"postgresql-9.2-1003.jdbc4.jar"修改为:myCP="../lib/
edb-jdbc16.jar",其他几个sh文件也是一样的修改;
[root@dbserver ~]# vim
/opt/benchmarksql_ora/run/runBenchmark.sh
[root@dbserver ~]# vim
/opt/benchmarksql_ora/run/runLoader.sh
3、创建benchmarksql用户并赋予适当的权限
[root@dbserver ~]# psql
-U enterprisedb edb
edb=# CREATE USER
benchmarksql WITH PASSWORD '000000';
CREATE ROLE
edb=# GRANT ALL
PRIVILEGES ON DATABASE edb TO benchmarksql;
GRANT
4、转到benchmarksql的run目录,运行脚本创建测试表
[root@dbserver run]#
./runSQL.sh props.pg sqlTableCreates
如果要删除表,则可以运sqlTableDrops脚本
5、加载测试数据
[root@dbserver run]#
./runLoader.sh props.pg numWarehouses 1
执行完成后可以看到执行的统计结果。
6、创建主键和索引
[root@dbserver
run]#./runSQL.sh props.pg sqlIndexCreates
如果要删除索引,则可以运sqlIndexDrops脚本
7、使用benchmark进行测试:
[root@dbserver run]#
./runBenchmark.sh props.pg
脚本“runBenchmark.sh”会根据props.pg文件中的配置进行自动化的测试,测试完成会给出详细的测试报告。
8、自动测试
自动测试脚本
#! /bin/sh
./runSQL.sh props.pg
sqlIndexDrops
./runSQL.sh props.pg
sqlTableDrops
./runSQL.sh props.pg
sqlTableCreates
./runLoader.sh props.pg
numWarehouses 1
./runSQL.sh props.pg
sqlIndexCreates
./runBenchmark.sh
props.pg
自动删除索引,表及测试结果脚本
#! /bin/sh
./runSQL.sh props.pg
sqlIndexDrops
./runSQL.sh props.pg
sqlTableDrops
./clean.sh
三、PostgreSQL测试
四、MySQL测试
[root@dbserver ~]#
mysql --version
mysql Ver 14.14
Distrib 5.6.14, for Linux (x86_64) using EditLine wrapper
1、准备JDBC驱动
[root@dbserver ~]# cp
/opt/workspace/mysql-connector-java-5.1.26/mysql-connector-java-5.1.26-bin.jar
/opt/benchmarksql_mysql/lib/
2、修改benchmarksql的执行脚本
首先将执行脚本中的驱动全部修改为MySQL的JDBC驱动:
[root@dbserver ~]# vim
/opt/benchmarksql_mysql/run/runSQL.sh
将脚本中的"postgresql-9.2-1003.jdbc4.jar"修改为:myCP="../lib/
mysql-connector-java-5.1.26-bin.jar ",其他几个sh文件也是一样的修改;
[root@dbserver ~]# vim
/opt/benchmarksql_mysql/run/runBenchmark.sh
[root@dbserver ~]# vim
/opt/benchmarksql_mysql/run/runLoader.sh
3、创建benchmarksql用户并赋予适当的权限
benchmarksql建议使用一个用户名为““benchmarksql”的用户进行测试,这里我们先在Oracle中创建benchmarksql用户:
[root@dbserver ~]#
mysql -u root -p
mysql> CREATE USER
'benchmarksql'@'localhost' IDENTIFIED BY '000000';
mysql> flush
privileges;
创建测试数据库
mysql> create
database benchmarkdb;
为用户赋予操作数据库benchmarkdb的所有权限
mysql> grant all
privileges on benchmarkdb.* to 'benchmarksql'@'localhost' identified
by '000000';
mysql> flush
privileges;
4、修改配置文件中的数据库连接信息
[root@dbserver ~]# cp
/opt/benchmarksql_mysql/run/props.ora
/opt/benchmarksql_ora/run/props.mysql
[root@dbserver ~]# vim
/opt/benchmarksql_ora/run/props.mysql
修改props.mysql中的连接字符串及mysql数据库的用户名和密码。
driver=com.mysql.jdbc.Driver
conn=jdbc:mysql://localhost:3306/benchmarkdb
user=benchmarksql
password=000000
5、创建测试表
[root@dbserver ~]# cd
/opt/benchmarksql_ mysql/run/
[root@dbserver run]#
./runSQL.sh props.mysql sqlTableCreates如果要删除表,则可以运sqlTableDrops脚本
6、加载测试数据
[root@dbserver run]#
./runLoader.sh props.mysql numWarehouses 1
执行完成后可以看到执行的统计结果。
7、创建主键和索引
[root@dbserver
run]#./runSQL.sh props.mysql sqlIndexCreates
如果要删除索引,则可以运sqlIndexDrops脚本
8、使用benchmark进行测试:
[root@dbserver run]#
./runBenchmark.sh props.mysql
脚本“runBenchmark.sh”会根据props.mysql文件中的配置进行自动化的测试,测试完成会给出详细的测试报告。
mysql的测试,在最后一步runBenchmark.sh脚本时,会出很多的错误,一部分是mysql的sql脚本的问题,需要自己重新对几个sql脚本进行修改,使之符合mysql语法,这里有一篇文章介绍了benchmarksql对mysql的测试,但是是非常老的版本,记录作为参考:
http://kenshin579.tistory.com/322
五、Oracle测试
1、准备JDBC驱动
从Oracle的JDBC目录中复制Oracle
JDBC驱动到benchmarksql的lib目录中
Oracle version:10.2.0.4
cp /oracle/product/10.2/db_1/jdbc/lib/ojdbc14.jar
/opt/benchmarksql_ora/lib/
Oracle version:11.2.0.1
cp
$ORACLE_HOME/jdbc/lib/ojdbc6.jar ~/benchmarksql_ora/lib/
2、修改benchmarksql的执行脚本
首先将执行脚本中的驱动全部修改为Oracle的JDBC驱动:
[root@dbserver ~]# vim
/opt/benchmarksql_ora/run/runSQL.sh
将脚本中的"postgresql-9.2-1003.jdbc4.jar"修改为:myCP="../lib/ojdbc14.jar",其他几个sh文件也是一样的修改;
[root@dbserver ~]# vim
/opt/benchmarksql_ora/run/runBenchmark.sh
[root@dbserver ~]# vim
/opt/benchmarksql_ora/run/runLoader.sh
3、修改配置文件中的数据库连接信息
[root@dbserver ~]# cp
/opt/benchmarksql_ora/run/props.ora
/opt/benchmarksql_ora/run/props.ora.bak
[root@dbserver ~]# vim
/opt/benchmarksql_ora/run/props.ora
修改props.ora中的连接字符串及oracle数据库的用户名和密码。
4、创建benchmarksql用户并赋予适当的权限
benchmarksql建议使用一个用户名为““benchmarksql”的用户进行测试,这里我们先在Oracle中创建benchmarksql用户:
CREATE USER
benchmarksql IDENTIFIED BY "000000";
GRANT dba TO
benchmarksql;
4、创建测试表
[root@dbserver ~]# cd
/opt/benchmarksql_ora/run/
[root@dbserver run]#
./runSQL.sh props.ora sqlTableCreates如果要删除表,则可以运sqlTableDrops脚本
5、加载测试数据
[root@dbserver run]#
./runLoader.sh props.ora numWarehouses 1
执行完成后可以看到执行的统计结果。
6、创建主键和索引
[root@dbserver
run]#./runSQL.sh props.ora sqlIndexCreates
如果要删除索引,则可以运sqlIndexDrops脚本
7、使用benchmark进行测试:
[root@dbserver run]#
./runBenchmark.sh props.ora
脚本“runBenchmark.sh”会根据props.ora文件中的配置进行自动化的测试,测试完成会给出详细的测试报告。
Oracle version:11.2.0.1
1、准备JDBC驱动
从Oracle的JDBC目录中复制Oracle
JDBC驱动到benchmarksql的lib目录中
[oracle@rhel ~]$ cp
/u01/oracle/product/11.2/dbhome_1/jdbc/lib/ojdbc6.jar
~/benchmarksql-4.0.8/lib/
2、修改benchmarksql的执行脚本
首先将执行脚本中的驱动全部修改为Oracle的JDBC驱动:
[root@ ~]# vim
/opt/benchmarksql_ora/run/runSQL.sh
将脚本中的"postgresql-9.2-1003.jdbc4.jar"修改为:myCP="../lib/ojdbc6.jar",其他几个sh文件也是一样的修改;
[root@ ~]# vim
/opt/benchmarksql_ora/run/runBenchmark.sh
[root@ ~]# vim
/opt/benchmarksql_ora/run/runLoader.sh
3、修改配置文件中的数据库连接信息
[root@dbserver ~]# cp
/opt/benchmarksql-4.0.8/run/props.ora
/opt/benchmarksql-4.0.8/run/props.ora.bak
[root@ ~]# vim
/opt/benchmarksql_ora/run/props.ora
修改props.ora中的连接字符串及oracle数据库的用户名和密码。
创建benchmarksql用户并赋予适当的权限
benchmarksql建议使用一个用户名为““benchmarksql”的用户进行测试,这里我们先在Oracle中创建benchmarksql用户:
CREATE USER
benchmarksql IDENTIFIED BY "000000";
GRANT dba TO
benchmarksql;
4、创建测试表
[root@dbserver ~]# cd
/opt/benchmarksql_ora/run/
[root@dbserver run]#
./runSQL.sh props.ora sqlTableCreates如果要删除表,则可以运sqlTableDrops脚本
5、加载测试数据
[root@dbserver run]#
./runLoader.sh props.ora numWarehouses 1
执行完成后可以看到执行的统计结果。
6、创建主键和索引
[root@dbserver
run]#./runSQL.sh props.ora sqlIndexCreates
如果要删除索引,则可以运sqlIndexDrops脚本
7、使用benchmark进行测试:
[root@dbserver run]#
./runBenchmark.sh props.ora
脚本“runBenchmark.sh”会根据props.ora文件中的配置进行自动化的测试,测试完成会给出详细的测试报告。
六、使用pgbench对EDB进行性能测试
1、安装pgbench
安装完PostgreSQL
Plus Advanced
server,已经默认安装了pgbench;如果使用PostgreSQL,那么需要通过pgbench的源码进行编译和安装,此处略。
2、初始化测试数据
[root@edbs1 ~]# pgbench
-i benchmarkdb -U enterprisedb
3、测试
[root@edbs1
pgbenchscripts]# pgbench -c 10 -j 10 -T 30 -d benchmarkdb -U
enterprisedb -f /opt/workspace/pgbenchscripts/script_1.sql >
/opt/workspace/pgbenchscripts/script_5.out
下面是script_1.sql的内容,如果不指定-f参数,则使用pgbench默认的脚本进行测试。如果指定了-S参数,可以进行只读测试。
\set nbranches :scale
\set ntellers 10 *
:scale
\set naccounts 100000 *
:scale
\setrandom delta -5000
5000
\setrandom aid 1
:naccounts
\setrandom bid 1
:nbranches
\setrandom tid 1
:ntellers
BEGIN;
UPDATE pgbench_accounts
SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM
pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers
SET tbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches
SET bbalance = bbalance + :delta WHERE bid = :bid;
INSERT INTO
pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid,
:bid,:aid,:delta, CURRENT_TIMESTAMP);
END;
关于pgbench更多参数介绍,使用pgbench
--help进行查看。
Benchmarking options:
-c NUM number
of concurrent database clients (default: 1)
-C
establish new connection for each transaction
-D VARNAME=VALUE
define
variable for use by custom script
-f FILENAME read
transaction script from FILENAME
-j NUM number
of threads (default: 1)
-l write
transaction times to log file
-M
simple|extended|prepared
protocol
for submitting queries to server (default: simple)
-n do not
run VACUUM before tests
-N do not
update tables "pgbench_tellers" and "pgbench_branches"
-r report
average latency per command
-s NUM report
this scale factor in output
-S perform
SELECT-only transactions
-t NUM number
of transactions each client runs (default: 10)
-T NUM duration
of benchmark test in seconds
-v vacuum
all four standard tables before tests
--aggregate-interval=NUM
aggregate data over NUM seconds
--sampling-rate=NUM
fraction
of transactions to log (e.g. 0.01 for 1% sample)
[原创]使用benchmarksql和pgbench对PostgreSQL Plus Advanced Server进行性能测试的更多相关文章
- [原创] PostgreSQL Plus Advanced Server在Windows中配置双机热备流复制
一.系统环境 操作系统:Windows Server 2003/2008 两个节点分别为master与slave. 主节点master:172.27.19.28 备机点slave:172.27.19. ...
- [原创]PostgreSQL Plus Advanced Server配合crontab实现定时维护工作
本文要实现的目标1.PostgreSQL定时全备2.定时删除归档WAL文件3.定时删除全备文件4.删除n天之前的数据库日志文件 实验环境操作系统:RHEL 6.3数据库:PostgreSQL Plus ...
- [原创]PostgreSQL Plus Advanced Server监控工具PEM(四)
四.PEM管理工具 1.编辑配置 选择进行管理的目标服务器,点击菜单Tools->Server Configuration->postgresql.conf管理服务器配置,可以看到我们经常 ...
- [原创]PostgreSQL Plus Advanced Server监控工具PEM(一)
一.概述 PEM是为数据库管理员.系统架构师和性能分析师为管理.监控和优化 PostgreSQL 和 EnterpriseDB 数据库服务器设计的图形化管理工具.旨在解决大量数据库服务器跨地域.精细化 ...
- [原创]PostgreSQL Plus Advanced Server批量创建分区表写入亿级别数据实例
当前情况:大表的数据量已接近2亿条我的解决思路:为它创建n*100个分区表,将各个分区表放在不同的tablespace上这样做的优点:1.首先是对这个级别的数据表的性能会有所提升2.数据管理更科学3. ...
- [原创]从Oracle和Microsoft Sql Server迁移到PostgreSQL Plus Advanced Server
一.了解PPAS的迁移方式1.在线迁移和离线迁移使用Migration Studio或Migration Toolkit直接向PPAS数据库进行对象定义和数据表中数据的迁移称为在线迁移,生成要迁移对象 ...
- [原创]PostgreSQL Plus Advanced Server监控工具PEM(三)
三.使用PEM Client 在PEM Client中连接PEM Server 点击上图所示的按钮或点击菜单-> 第一次连接PEM Server,会有一次导入证书的操作,点击Yes按钮. 接下来 ...
- [原创]PostgreSQL Plus Advanced Server监控工具PEM(二)
2.安装PEM Client 简单两条命令,开始PEM Client的安装. 我们在SUSE 11sp2上安装PEM Client 安装结束,运行PEM Client后可以看到如下的界面: 目前我们并 ...
- 使用pgbench测试PostgreSQL
pgbench –help 初始化选项: -i 调用初始化模式 -F NUM 填充因子 -s NUM 规模因子(与产生数据量大小有关) Benchmarking选项: -c ...
随机推荐
- com学习(五)——实现多接口
从第五回开始到第七回,咱们用 ATL 写了一个简单的 COM 组件,之所以说简单,是因为在组件中,只实现了一个自定义(custom)的接口 IFun.当然如果想偷懒的话,我们可以把 200 个函数都加 ...
- 【测试】通过RMAN联机全库备份,包括控制文件,归档日志文件,备份成功后,删除已备份的归档日志。
RMAN是一个很方便很好用的备份,恢复,还原的一个工具,做这个小测试其实只有一个RMAN语句就完全解决了这么大的需求: RMAN> backup as backupset full databa ...
- phpinfo中查不到memcache信息问题
已经安装了php的memcache扩展,可是怎么都不能通过phpinfo查询到,实际使用时提示扩展未安装.为什么呢?百般寻求解决方法,才发现主要有以下两点原因: 1.使用的php和安装扩展的php不是 ...
- sublime Text及package control的安装
1.下载并安装sublime Text2http://www.baidu.com/s?wd=sublime&rsv_spt=1&issp=1&f=8&rsv_bp=0& ...
- TCP/IP详解学习笔记(9)-- 广播,多播,IGMP:网际组管理协议
1.概述 IP有三种地址:单播地址, 广播地址,多播地址. 广播和多播仅应用于UDP. 每个以太网帧包含源主机和目的主机的以太网地址.通常每个以太网帧发往单个目的主机,目 ...
- Java基础类库
1 main方法 运行java程序的参数: 下面详细讲解main 方法为什么采用这个方法签名 1.public 修饰符:Java类由jvm调用,为了让jvm可以自由调用这个main()方 ...
- ios开发经典语录锦集
原文链接: iPhone开发经典语录集锦 前言:iPhone是个极具艺术性的平台,相信大家在开发过程中一定有很多感触,希望能写出来一起交流,所以开了这个帖子,以后还会维护. 如果大家和我一样有感触的话 ...
- linux 内核调试
内核中有多项用于调试的功能,但这些功能会造成额外输出,并导致性能下降,因此发行版本厂商通过都禁止发行版内核中的这些功能.但作为一名内核开发者,调试需求具有更高的优先级,因此应该构造并安装自己的内核,并 ...
- angular.extend(dst, src)对象拓展
angular.extend(dst, src) 作用:对象的拓展 参数: dst:拓展的对象 src:源对象 返回值:拓展的对象 var dst = {name: 'xxx', country: ...
- py2.7+pyqt4开发端口检测工具
使用工具:python2.7,pyqt4,pyinstaller,pywin32 先贴代码 import sys from PyQt4 import QtGui,QtCore import threa ...