数据库基准测试3:HammerDB使用入门(for Oracle)
1.前期准备
- 安装好HammerDB(参考其他文档);
- 在压测机上安装好Oracle Client;(参考其他文档)
- 准备好一个可用于压力测试的oracle数据库;
2.librarycheck
使用hammerdbcli命令进入命令模式,再输入librarycheck命令查看结果是否有Success ... loaded library Oratcl for Oracle的提示,如果提示not found则安装对应的包即可,结果如以下:
hammerdb>librarycheck
Checking database library for Oracle
Success ... loaded library Oratcl for Oracle
Checking database library for MSSQLServer
Success ... loaded library tdbc::odbc for MSSQLServer
Checking database library for Db2
Success ... loaded library db2tcl for Db2
Checking database library for MySQL
Error: failed to load mysqltcl - couldn't load file "/tmp/tcl_n3TbP2": libmysqlclient.so.24: cannot open shared object file: No such file or directory
Ensure that MySQL client libraries are installed and the location in the LD_LIBRARY_PATH environment variable
Checking database library for PostgreSQL
Success ... loaded library Pgtcl for PostgreSQL
Checking database library for MariaDB
Success ... loaded library mariatcl for MariaDB
oracle的连接配置不像DB那么麻烦,后续步骤进行说明。
2.准备Oracle测试库
- 目标测试数据库
所准备的oracle数据库的连接信息如下:
IP:192.168.1.62
Port:1521
SID:testdb
User:hammerdb
Password:my_passwd
- 建立表空间
如果不建立此临时表空间,则checkschema命令会失败。
CREATE TABLESPACE tpcc
DATAFILE '/oracle/app/oradata/aic/tpcc01.dbf'
SIZE 1G
AUTOEXTEND ON NEXT 1G
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
3.进行TPCC的基准测试
3.1.配置测试库的信息
使用hammerdbcli命令进入命令窗口,按以下步骤添加测试库的信息:
- 设置数据库类型
使用dbset db命令设置压测数据库的类型,print db查看设置的结果
hammerdb>dbset db ora
Database set to Oracle
hammerdb>print db
Database Oracle set.
To change do: dbset db prefix, one of:
Oracle = ora MSSQLServer = mssqls Db2 = db2 MySQL = mysql PostgreSQL = pg MariaDB = maria
- 设置基准测试类型
使用dbset bm命令设置压测数据库的类型,print bm查看设置的结果
hammerdb>dbset bm TPC-C
Benchmark set to TPC-C for Oracle
hammerdb>print bm
Benchmark set to TPC-C
- 配置负载信息
使用print dict可以查看到全部的配置信息(以下是配置好后的参数)。
hammerdb>print dict
Dictionary Settings for Oracle
connection {
system_user = hammerdb
system_password = my_passwd
instance = 192.168.1.62:1521/testdb
rac = 0
}
tpcc {
count_ware = 10
num_vu = 5
tpcc_user = hammerdb
tpcc_pass = my_passwd
tpcc_def_tab = tpcc
tpcc_ol_tab = tpcc
tpcc_def_temp = temp
partition = true
hash_clusters = false
tpcc_tt_compat = false
total_iterations = 10000000
raiseerror = false
keyandthink = false
checkpoint = false
ora_driver = timed
rampup = 2
duration = 5
allwarehouse = false
ora_timeprofile = false
async_scale = false
async_client = 10
async_verbose = false
async_delay = 1000
connect_pool = false
}
按上述内容配置必须的参数,设置数据库连接及负载的设置使用diset命令,如下:
# 连接数据库的用户名
diset connection system_user hammerdb
# 数据库的密码
diset connection system_password my_passwd
# 连接地址
diset connection instance 192.168.1.62:1521/testdb
# 也是数据库的连接用户名
diset tpcc tpcc_user hammerdb
# 密码
diset tpcc tpcc_pass my_passwd
# 灌的压测仓库数量
diset tpcc count_ware 10
# 创建的虚拟用试
diset tpcc num_vu 5
# 以下为指定的表空间及临时表空间
diset tpcc tpcc_def_tab tpcc
diset tpcc tpcc_ol_tab tpcc
diset tpcc tpcc_def_temp temp
# 开启分区表的特性
diset tpcc partition true
💡 提示:其他参数请参考官网中的说明进行设置
目前存在两个问题:(1)tpcc_def_tab无论如何设置,始终是使用默认的users表空间;(2)如果是使用脚本的方式执行buildschema,需要在脚本中设置 rampup、duration这两个参数,当vu数量较大时,否则无法在buildschema时无法创建monitor thread。
3.2.测试前的数据清理
hammerdb在生成数据时,必须清理指定schema(与用户名一致)中以下全部对象(如果之前有加载过测试数据的):
- tables
- views
3.3.加载测试数据(buildschema)
执行加载之前,先要确定要加载多少个仓库的数据,及确定执行的虚拟用户数据,如以下的设置,这里创建了10个仓库的数据,用户也使用5个用户,但hammerdb在执行时会多生成一个用户用于监视进程的。
hammerdb>diset tpcc count_ware 5
hammerdb>diset tpcc num_vu 5
再使用bulidschema命令开始执行加载测试数据命令,hammerdb会根据print dict中的配置加载测试数据,如下:
hammerdb>buildschema
Script cleared
Building 10 Warehouses with 6 Virtual Users, 5 active + 1 Monitor VU(dict value num_vu is set to 5)
Ready to create a 10 Warehouse Oracle TPROC-C schema
in database 192.168.1.62:1521/TESTDB under user HAMMERDB in tablespace TPCC?
Enter yes or no: replied yes
Vuser 1 created - WAIT IDLE
Vuser 2 created - WAIT IDLE
Vuser 3 created - WAIT IDLE
Vuser 4 created - WAIT IDLE
Vuser 5 created - WAIT IDLE
Vuser 6 created - WAIT IDLE
Vuser 1:RUNNING
Vuser 1:Monitor Thread
Vuser 1:CREATING DMPMON SCHEMA
Vuser 1:CREATING USER hammerdb
Vuser 1:ORA-01920: user name 'HAMMERDB' conflicts with another user or role name create user hammerdb identified by hammerdb default tablespace tpcc temporary tablespace temp
Vuser 1:CREATING TPCC TABLES
Vuser 1:Loading Item
Vuser 2:RUNNING
Vuser 2:Worker Thread
Vuser 2:Waiting for Monitor Thread...
Vuser 2:Loading 2 Warehouses start:1 end:2
Vuser 2:Start:Thu Oct 30 15:31:04 CST 2025
Vuser 2:Loading Warehouse
Vuser 2:Loading Stock Wid=1
Vuser 3:RUNNING
(略)
Vuser 4:Orders Done
Vuser 4:End:Thu Oct 30 15:32:31 CST 2025
Vuser 4:FINISHED SUCCESS
Vuser 5:Orders Done
Vuser 5:End:Thu Oct 30 15:32:31 CST 2025
Vuser 5:FINISHED SUCCESS
Vuser 6:Orders Done
Vuser 6:End:Thu Oct 30 15:32:31 CST 2025
Vuser 6:FINISHED SUCCESS
Vuser 1:Loading Items - 100000
Vuser 1:Item done
Vuser 1:Monitoring Workers...
Vuser 1:CREATING TPCC INDEXES
Vuser 1:CREATING TPCC STORED PROCEDURES
Vuser 1:GATHERING SCHEMA STATISTICS
Vuser 1:DMPMON SCHEMA COMPLETE
Vuser 1:FINISHED SUCCESS
ALL VIRTUAL USERS COMPLETE
Schema Build jobid=690314373B3D03E293332353
3.4.检查数据(checkschema)
在进行负载测试时,需要确定已加载的数据是否可用,这里要使用checkschema命令。
💡 提示:如果执行时会提示“Error: Cannot check schema with Virtual Users active, destroy Virtual Users first”,则需要使用
vudestroy命令将上一步骤中未关闭的虚拟用户关闭掉。
hammerdb>checkschema
Script cleared
Checking schema with 1 Virtual User
Do you want to check the HAMMERDB Oracle TPROC-C schema
in the instance 10.110.175.65:1521/AIC?
Enter yes or no: replied yes
Vuser 1 created - WAIT IDLE
Vuser 1:RUNNING
Vuser 1:Checking hammerdb TPROC-C schema
Vuser 1:Check schema
Vuser 1:Check tables and indices
Vuser 1:Check procedures
Vuser 1:Check consistency 1
Vuser 1:Check consistency 2
Vuser 1:Check consistency 3
Vuser 1:Check consistency 4
Vuser 1:hammerdb TPROC-C schema has been checked successfully
Vuser 1:FINISHED SUCCESS
ALL VIRTUAL USERS COMPLETE
Schema Check jobid=6903155C4CB903E263339363
3.5.运行负载(vurun)
- 创建虚拟用户
需要确定所需要的并发用户数(vu),使用以下命令进行设置:
hammerdb>print vucreated
0 Virtual Users created
hammerdb>vuset vu 10
hammerdb>print vuconf
Virtual Users = 10
User Delay(ms) = 500
Repeat Delay(ms) = 500
Iterations = 1
Show Output = 1
Log Output = 0
Unique Log Name = 0
No Log Buffer = 0
Log Timestamps = 0
再使用vucreate命令创建用户,并查看用户的状态:
hammerdb>vucreate
Script loaded, Type "print script" to view
Vuser 1 created MONITOR - WAIT IDLE
Vuser 2 created - WAIT IDLE
Vuser 3 created - WAIT IDLE
Vuser 4 created - WAIT IDLE
Vuser 5 created - WAIT IDLE
Vuser 6 created - WAIT IDLE
Vuser 7 created - WAIT IDLE
Vuser 8 created - WAIT IDLE
Vuser 9 created - WAIT IDLE
Vuser 10 created - WAIT IDLE
Vuser 11 created - WAIT IDLE
11 Virtual Users Created with Monitor VU
hammerdb>vustatus
1 = WAIT IDLE
2 = WAIT IDLE
3 = WAIT IDLE
4 = WAIT IDLE
5 = WAIT IDLE
6 = WAIT IDLE
7 = WAIT IDLE
8 = WAIT IDLE
9 = WAIT IDLE
10 = WAIT IDLE
11 = WAIT IDLE
- 运行负载
使用vurun命令开始运行负载:
hammerdb>vurun
Vuser 1:RUNNING
Vuser 1:DBVersion:11.2.0.4.0
Vuser 1:Beginning rampup time of 2 minutes
Vuser 2:RUNNING
Vuser 2:Processing 10000000 transactions with output suppressed...
Vuser 3:RUNNING
Vuser 3:Processing 10000000 transactions with output suppressed...
Vuser 4:RUNNING
Vuser 4:Processing 10000000 transactions with output suppressed...
Vuser 5:RUNNING
Vuser 5:Processing 10000000 transactions with output suppressed...
Vuser 6:RUNNING
Vuser 6:Processing 10000000 transactions with output suppressed...
Vuser 7:RUNNING
Vuser 7:Processing 10000000 transactions with output suppressed...
Vuser 8:RUNNING
Vuser 8:Processing 10000000 transactions with output suppressed...
Vuser 9:RUNNING
Vuser 9:Processing 10000000 transactions with output suppressed...
Vuser 10:RUNNING
Vuser 10:Processing 10000000 transactions with output suppressed...
Vuser 11:RUNNING
Vuser 11:Processing 10000000 transactions with output suppressed...
Vuser 1:Rampup 1 minutes complete ...
Vuser 1:Rampup 2 minutes complete ...
Vuser 1:Rampup complete, Taking start AWR snapshot.
Vuser 1:Start Snapshot 1228 taken at 30 OCT 2025 15:40 of instance aic (1) of database AIC (78078981)
Vuser 1:Timing test period of 5 in minutes
Vuser 1:1 ...,
Vuser 1:2 ...,
Vuser 1:3 ...,
Vuser 1:4 ...,
Vuser 1:5 ...,
Vuser 1:Test complete, Taking end AWR snapshot.
Vuser 1:End Snapshot 1229 taken at 30 OCT 2025 15:45 of instance aic (1) of database AIC (78078981)
Vuser 1:Test complete: view report from SNAPID 1228 to 1229
Vuser 1:10 Active Virtual Users configured
Vuser 1:TEST RESULT : System achieved 57798 NOPM from 122181 Oracle TPM
Vuser 4:FINISHED SUCCESS
Vuser 1:FINISHED SUCCESS
Vuser 6:FINISHED SUCCESS
Vuser 11:FINISHED SUCCESS
Vuser 10:FINISHED SUCCESS
Vuser 7:FINISHED SUCCESS
Vuser 5:FINISHED SUCCESS
Vuser 9:FINISHED SUCCESS
Vuser 2:FINISHED SUCCESS
Vuser 3:FINISHED SUCCESS
Vuser 8:FINISHED SUCCESS
ALL VIRTUAL USERS COMPLETE
Benchmark Run jobid=69031610576D03E233039333
- 查看运行结果
上述vurun中的内容简单列出了hammerdb的运行结果,本次压测的结果为122181 TPM及57798 NOPM。
Vuser 1:TEST RESULT : System achieved 57798 NOPM from 122181 Oracle TPM
4.总结说明
上述是使用hammerdbcli对一个Oracel数据库的测试的完整过程,本文仅介绍command的方式执行数据库基准测试的过程,至于使用HammerDB中自带的tcl脚本去执行压测,可以参考我之前的文章进行修改。与DB2的压测相比,Oracle在连接数据库方面会更加简单一点,过程类似,只是某些参数的名称不一致而已。
浙公网安备 33010602011771号