快轉到主要內容

資料庫壓力測試

·1152 字·3 分鐘·
PolloChang
作者
PolloChang
我是一隻雞

最近在工作中安裝完資料庫後,在煩惱有什方式可以測試資料庫效能足夠應付未來的業務需求。一開始的想法是自己寫腳本進行測試,但是想到要自己寫就開始發懶,因此開始有沒有別人寫好的工具。

在努力的搜尋過後,發現 HammerDB 是符合我的需求: OpenSource, 易於安裝, CLI 執行。

以下是我初次學習安裝的紀錄

環境
#

  • 壓力測試AP主機: 個人電腦
 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
  • 測試資料庫: Oracle 19c

安裝 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
./hammerdbcli
 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 介面查看報告
#

1
hammerdbws

打開瀏覽器入 http://localhost:8080 就可以輕鬆查看報告

操作方式
#

重新建立測試資料
#

1
2
3
4
5
6
# drop user tpcc cascade;
hammerdb>vudestroy
vudestroy success

hammerdb>buildschema
Script cleared

Referance
#