最近在工作中安裝完資料庫後,在煩惱有什方式可以測試資料庫效能足夠應付未來的業務需求。一開始的想法是自己寫腳本進行測試,但是想到要自己寫就開始發懶,因此開始有沒有別人寫好的工具。
在努力的搜尋過後,發現 HammerDB 是符合我的需求: OpenSource, 易於安裝, CLI 執行。
以下是我初次學習安裝的紀錄
環境
#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
❯ fastfetch
_,met$$$$$gg. pollochang@pollo-nb-5310
,g$$$$$$$$$$$$$$$P. ------------------------
,g$$P"" """Y$$.". OS: Debian GNU/Linux 13 (trixie) x86_64
,$$P' `$$$. Host: Latitude 5310
',$$P ,ggs. `$$b: Kernel: Linux 6.12.74+deb13+1-amd64
`d$$' ,$P"' . $$$ Uptime: 15 hours, 13 mins
$$P d$' , $$P Packages: 3357 (dpkg)
$$: $$. - ,d$$' Shell: zsh 5.9
$$; Y$b._ _,d$P' Display (AUO212D): 1920x1080 @ 60 Hz (as 1536x864) in 13" [Built-in]
Y$$. `.`"Y$$$$P"' DE: GNOME 48.7
`$$b "-.__ WM: Mutter (Wayland)
`Y$$b WM Theme: Adwaita
`Y$$. Theme: Adwaita [GTK2/3/4]
`$$b. Icons: Adwaita [GTK2/3/4]
`Y$$b. Font: Cantarell (11pt) [GTK2/3/4]
`"Y$b._ Cursor: Adwaita (24px)
`"""" Terminal: tabby 1.0.228
Terminal Font: MesloLGS NF (16pt)
CPU: Intel(R) Core(TM) i5-10310U (8) @ 4.40 GHz
GPU: Intel UHD Graphics @ 1.15 GHz [Integrated]
Memory: 7.54 GiB / 62.50 GiB (12%)
Swap: 0 B / 977.00 MiB (0%)
Disk (/): 1.16 TiB / 1.79 TiB (65%) - ext4
Local IP (wlo1): 172.30.2.10/24
Battery (DELL WXW8096): 94% [Charging, AC Connected]
Locale: en_US.UTF-8
|
安裝 sqlplus
#
1
2
3
4
5
6
7
8
9
10
11
12
|
wget
unzip -q instantclient-basic-linux.x64-19.30.0.0.0dbru.zip
uznip -q instantclient-sqlplus-linux.x64-19.30.0.0.0dbru.zip
sudo mv instantclient_19_30 /usr/local/sqlplus
sudo mkdir -p /usr/local/sqlplus/lib
cd /usr/local/sqlplus
# 進入你那個充滿 .so 的目錄後執行:
ln -sf $(pwd)/libclntsh.so ./lib/libclntsh.so
ln -sf $(pwd)/libclntsh.so.19.1 ./lib/libclntsh.so.19.1
ln -sf $(pwd)/libnnz19.so ./lib/libnnz19.so
ln -sf $(pwd)/libociei.so ./lib/libociei.so
ln -sf $(pwd)/libclntshcore.so.19.1 ./lib/libclntshcore.so.19.1
|
1
2
3
4
5
|
export ORACLE_HOME=/usr/local/sqlplus
# 同時包含根目錄與 lib 目錄,確保 HammerDB 不管怎麼找都找得到
export LD_LIBRARY_PATH=$ORACLE_HOME:$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=$ORACLE_HOME:$PATH
|
- /usr/local/sqlplus/network/admin/tnsnames.ora
1
2
3
4
5
6
7
8
|
db151 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.30.1.151)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db)
)
)
|
1
2
3
4
5
6
7
|
-- 以 SYSDBA 身份執行
CREATE USER masterdba IDENTIFIED BY "1qaz@WSX3edc" ACCOUNT UNLOCK;
-- 賦予必要的權限
GRANT CONNECT, RESOURCE, DBA TO masterdba;
ALTER USER masterdba QUOTA UNLIMITED ON USERS;
|
安裝 hammerdb
#
1
2
|
sudo apt install libtcl8.6 libtk8.6 unixodbc unixodbc-dev
sudo apt install tcl tk
|
下載 hammerdb-5.0-1.el9.x86_64.rpm 直接解壓縮就可以直接使用了
進行壓力測試
#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
dbset db ora
diset connection system_user masterdba
diset connection system_password Aa1234..
diset connection instance db151
diset connection instance //172.30.1.151:1521/db151
vudestroy
buildschema
# 設定為計時模式 (Timed)
diset tpcc ora_driver timed
# 設定測試執行時間 (分鐘),例如 2 分鐘
diset tpcc duration 1
# 設定預熱時間 (分鐘),確保 Buffer Cache 已填滿
diset tpcc rampup 1
# 載入腳本:
loadscript
vucreate
vuset vu 1
vurun
|
以下是測試結果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
hammerdb>vudestroy
vudestroy success
hammerdb>vuset vu 1
hammerdb>vucreate
Vuser 1 created MONITOR - WAIT IDLE
Vuser 2 created - WAIT IDLE
2 Virtual Users Created with Monitor VU
hammerdb>vurun
Vuser 1:RUNNING
Vuser 1:DBVersion:19.0.0.0.0
Vuser 1:Beginning rampup time of 1 minutes
Vuser 2:RUNNING
Vuser 2:Processing 10000000 transactions with output suppressed...
Vuser 1:Rampup 1 minutes complete ...
Vuser 1:Rampup complete, Taking start AWR snapshot.
Vuser 1:Start Snapshot 73 taken at 13 APR 2026 08:48 of instance db151 (1) of database DB (1994028977)
Vuser 1:Timing test period of 1 in minutes
Vuser 1:1 ...,
Vuser 1:Test complete, Taking end AWR snapshot.
Vuser 1:End Snapshot 74 taken at 13 APR 2026 08:49 of instance db151 (1) of database DB (1994028977)
Vuser 1:Test complete: view report from SNAPID 73 to 74
Vuser 1:1 Active Virtual Users configured
Vuser 1:TEST RESULT : System achieved 4132 NOPM from 8873 Oracle TPM
Vuser 2:FINISHED SUCCESS
Vuser 1:FINISHED SUCCESS
ALL VIRTUAL USERS COMPLETE
Benchmark Run jobid=69DC3D3B64F403E233732313
hammerdb>
|
測試結果簡單說明
- TPM (Transactions Per Minute): 8873(這是 Oracle 每分鐘處理的所有交易總數)。
- NOPM (New Orders Per Minute): 4132(這是 TPROC-C 核心指標,代表每分鐘完成的「新訂單」交易,通常用來跨平台比較)。
- AWR Snapshot: 自動觸發了 Snapshots 73 到 74。
- jobid: 此次執行的 id ,未來在查詢報告會使用到
查看報告方式
#
在 CLI 模式中查看報告內容
#
1
2
3
4
|
# 查看有跑過哪些測試
jobs timestamp
# 查看報告
jobs <jobID> result
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
hammerdb>jobs timestamp
{
"69E2F1C0255303E293430313": "2026-04-18 10:51:44",
"69E2F1C825D803E283531333": "2026-04-18 10:51:52",
"69E2F20D29EC03E283933343": "2026-04-18 10:53:01",
"69E2F2462D5903E273932303": "2026-04-18 10:53:58",
"69E2F4B6528403E223639373": "2026-04-18 11:04:22",
"69E2F4C2533E03E243439313": "2026-04-18 11:04:34",
"69E2F4E2552603E263032303": "2026-04-18 11:05:06"
}
hammerdb>jobs 69E2F2462D5903E273932303 result
[
"69E2F2462D5903E273932303",
"2026-04-18 10:53:58",
"1 Active Virtual Users configured",
"TEST RESULT : System achieved 4171 NOPM from 8797 Oracle TPM"
]
|
在web 介面查看報告
#
打開瀏覽器入 http://localhost:8080 就可以輕鬆查看報告
操作方式
#
重新建立測試資料
#
1
2
3
4
5
6
|
# drop user tpcc cascade;
hammerdb>vudestroy
vudestroy success
hammerdb>buildschema
Script cleared
|
Referance
#