1
2

More than 3 years have passed since last update.

HammerDB(CLI)でSQL Serverに負荷をかける

Last updated at Posted at 2020-05-17

はじめに

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>

参考

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2