はじめに
HammerDBでSQL ServerにCLIで負荷をかける手順のメモです。
- ベンチマーク実行環境はWindows10。<ODBC Driver 17 for SQL Server>で接続
- Windowsサーバ(VirtualBox上のVM)のSQL Server 2019に対して実行
- ベンチマーク用のDBの作成、必要な構成(ログイン作成、権限付与、SQL認証の許可など)は実施済み
- HammerDBスキーマの作成は実施済み
- HammerDBはv3.3
実施手順
事前作業(ODBC SQL Server のドライバーのバージョン設定)
HammerDB v3.3ではデフォルトのドライバが「ODBC Driver 13 for SQL Server」になっています。
「ODBC Driver 17 for SQL Server」など別のODBCのバージョンに変更する場合、 hammerdbインストールディレクトリのconfigの下のmssqlserver.xmlをエディタで開き、11行目を編集します。
<mssqls_odbc_driver>ODBC Driver 13 for SQL Server</mssqls_odbc_driver>
→
<mssqls_odbc_driver>ODBC Driver 17 for SQL Server</mssqls_odbc_driver>
後述のdisetでは、mssqls_odbc_driverの設定はエラーが発生します。
hammerdb>diset connection mssqls_odbc_driver "ODBC Driver 17 for SQL Server"
Clearing Script, reload script to activate new setting
Script cleared
Error: Driver script must be either "test" or "timed"
ソースコードの以下の部分の判定がうまくいってないようだけど、とりあえず深追いはせず。
if { [ string match *driver $key2 ] && ![ string match *odbc_driver $key2 ] } {
HammerDB CLIを起動する
hammerdbcliを実行します。
C:\Program Files\HammerDB-3.3\hammerdbcli.bat
hammerdb>
というプロンプトが返されます。
DBをSQL Serverに設定する
dbset db mssqls
hammerdb>dbset db mssqls
Database set to MSSQLServer
hammerdb>print db
Database MSSQLServer set.
To change do: dbset db prefix, one of:
Oracle = ora MSSQLServer = mssqls Db2 = db2 MySQL = mysql PostgreSQL = pg Redis = redis
ベンチマークタイプをTPC-Cに設定する
dbset bm TPC-C
hammerdb>dbset bm TPC-C
Benchmark set to TPC-C for MSSQLServer
hammerdb>print bm
Benchmark set to TPC-C
パラメータの指定
現在の設定値を確認する
現在の設定を確認します。
print dict
hammerdb>print dict
Dictionary Settings for MSSQLServer
connection {
mssqls_server = (local)
mssqls_linux_server = localhost
mssqls_tcp = false
mssqls_port = 1433
mssqls_azure = false
mssqls_authentication = windows
mssqls_linux_authent = sql
mssqls_odbc_driver = ODBC Driver 17 for SQL Server
mssqls_linux_odbc = ODBC Driver 17 for SQL Server
mssqls_uid = sa
mssqls_pass = admin
}
tpcc {
mssqls_count_ware = 1
mssqls_num_vu = 1
mssqls_dbase = tpcc
mssqls_imdb = false
mssqls_bucket = 1
mssqls_durability = SCHEMA_AND_DATA
mssqls_total_iterations = 1000000
mssqls_raiseerror = false
mssqls_keyandthink = false
mssqls_checkpoint = false
mssqls_driver = test
mssqls_rampup = 2
mssqls_duration = 5
mssqls_allwarehouse = false
mssqls_timeprofile = false
mssqls_async_scale = false
mssqls_async_client = 10
mssqls_async_verbose = false
mssqls_async_delay = 1000
}
パラメータの設定
変更したいパラメータの設定を以下で行います。
diset dict key value
いくつか例を記載します。
接続するサーバの変更
IPアドレスの指定とTCPでの接続を許可します。
diset connection mssqls_server 192.168.x.x
diset connection mssqls_tcp true
認証方式とユーザ名パスワードを変更
SQL認証にします。またデータベースのユーザ名とパスワードを指定します。
diset connection mssqls_authentication sql
diset connection mssqls_uid loaduser
diset connection mssqls_pass loaduser
ドライバースクリプトを変更
測定用のtimedにします。
diset tpcc mssqls_driver timed
データベース名を変更
データベース名をtpcc_aに変更します。
diset tpcc mssqls_dbase tpcc_a
変更後の設定値を確認する
設定が変更されていることを確認します。
hammerdb>print dict
Dictionary Settings for MSSQLServer
connection {
mssqls_server = 192.168.x.x
mssqls_linux_server = localhost
mssqls_tcp = true
mssqls_port = 1433
mssqls_azure = false
mssqls_authentication = sql
mssqls_linux_authent = sql
mssqls_odbc_driver = ODBC Driver 17 for SQL Server
mssqls_linux_odbc = ODBC Driver 17 for SQL Server
mssqls_uid = loaduser
mssqls_pass = loaduser
}
tpcc {
mssqls_count_ware = 1
mssqls_num_vu = 1
mssqls_dbase = tpcc_a
mssqls_imdb = false
mssqls_bucket = 1
mssqls_durability = SCHEMA_AND_DATA
mssqls_total_iterations = 1000000
mssqls_raiseerror = false
mssqls_keyandthink = false
mssqls_checkpoint = false
mssqls_driver = timed
mssqls_rampup = 2
mssqls_duration = 5
mssqls_allwarehouse = false
mssqls_timeprofile = false
mssqls_async_scale = false
mssqls_async_client = 10
mssqls_async_verbose = false
mssqls_async_delay = 1000
}
テストスクリプトのロード
ここまでの設定をロードします。
loadscript
hammerdb>loadscript
TPC-C Driver Script
Script loaded, Type "print script" to view
スキーマの作成
スキーマ作成済みの前提なので、スキーマの作成はスキップします。まだの場合は以下を実施します。
buildschema
仮想ユーザの設定
現在の設定値を確認する
現在の仮想ユーザの設定値を確認します。
print vuconf
hammerdb>print vuconf
Virtual Users = 1
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
仮想ユーザの設定
設定はvuset
で行います。
ここでは仮想ユーザを2に変更します。
hammerdb>vuset vu 2
変更後の設定値を確認する
設定が変更されていることを確認します。
hammerdb>print vuconf
Virtual Users = 2
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
Vuser 1 created MONITOR - WAIT IDLE
Vuser 2 created - WAIT IDLE
Vuser 3 created - WAIT IDLE
3 Virtual Users Created with Monitor VU
hammerdb>vustatus
1 = WAIT IDLE
2 = WAIT IDLE
3 = WAIT IDLE
ベンチマークの実行
vurun
にてロードしたスクリプトを作成した仮想ユーザーで実行させます。
完了するまで待ちます。
hammerdb>vurun
RUNNING - SQL Server TPC-C
Vuser 1:RUNNING
Vuser 2:RUNNING
Vuser 1:Beginning rampup time of 2 minutes
Vuser 2:Processing 1000000 transactions with output suppressed...
Vuser 3:RUNNING
<中略>
Vuser 1:Test complete, Taking end Transaction Count.
Vuser 1:2 Active Virtual Users configured
Vuser 1:TEST RESULT : System achieved 26853 SQL Server TPM at 11639 NOPM
Vuser 1:FINISHED SUCCESS
Vuser 3:FINISHED SUCCESS
Vuser 2:FINISHED SUCCESS
ALL VIRTUAL USERS COMPLETE
TPC-C Driver Script
hammerdb>
参考
- Chapter 8. Command Line Interface (CLI) https://hammerdb.com/docs/ch08.html
- HammerDBをCLIで使うなど:まとめ、あるいは、目次の代わりに https://atsuizo.hatenadiary.jp/entry/2019/09/09/090000
- HammerDB を使用した SQL Server の負荷テスト https://cloud.google.com/compute/docs/tutorials/load-testing-sql-server-hammerdb?hl=ja
- ODBC SQL Server のドライバーのバージョンを確認する方法 (Windows) https://docs.microsoft.com/ja-jp/sql/database-engine/configure-windows/check-the-odbc-sql-server-driver-version-windows?view=sql-server-ver15