TPC-Hの話に行く前に、自動化の件に触れておきたい
このHammerDBには、ベンチマークテストを繰り返し自動実行する「Autopilot」機能がついています。
「異なる数のユーザー数で、同じテストを繰り返す」というケースに対応するものです。
GUIだと「Autopilot」の「Option」から条件を設定するのですが、CLIについては、Autopilot関連を設定/確認するコマンドがありません!
AutopilotをCLIベースで使うためには、2つの方法があります。
1つは、hammerdb(.tcl)=GUI起動時に実行するものに「auto 自動実行ロジックをtclで書いたファイル」で実行する方法です。
3. Extending Autopilot
このドキュメントの例は、tclの中で、同時実行数のパターンを変えながら、config.xmlの条件で繰り返し実行するものになっています。
残念なことにxmlファイルの解説がどこにも見当たらないのですが、{HammerDB展開先}/config/の下に、各DBMS別のテンプレ(実際にGUI/CLIで呼び出されていそうなもの)があるので、これを参考にしろということだと思います。
お、おぅ。。。
諦めが早いので、今回はもう一つの方法を扱います。
HammerDB CLIの章の中で解説されている、「xmlファイル使わず、tclスクリプトの中で、hammerdbcliのコマンドを順次実行」という方法です。
8. CLI Scripting
平たく言えば「力技」なんですが、初めてtclを触る私でもわかるレベルなので。
さっそくですが、サンプルです。
公式ドキュメントについているサンプルは、以下のような仕様になっています。
- 対Redis
- TPC-C
- Schema Buildはしてある前提
- 1分ごとに経過表示
- テストが完了するか、120秒経過したら終了する
- 仮想ユーザーは「1」「2」「4」のパターンを実行する
これを、以下のように書き換えます。
- 対MySQL
- TPC-C
- Schema Buildはしてある前提
- 時間経過表示はしない
- テストは完了させる。時間で切らない。
- 仮想ユーザーは「1」「2」「4」「8」「16」のパターンを実行する
- パーセンタイル出力しない。
- その他の条件は、以前の記事のケースに準ずる。
で、スクリプトはこんなかんじ。
#!/usr/bin/tclsh puts "SETTING CONFIGURATION" dbset db mysql dbset bm TPC-C diset connection mysql_host localhost diset tpcc mysql_user tpcc diset tpcc mysql_pass tpcc diset tpcc mysql_driver timed vuset unique 1 vuset logtotemp 1 loadscript print dict puts "SEQUENCE STARTED" foreach z { 1 2 4 8 16} { puts "$z VU TEST" vuset vu $z vucreate print vuconf vurun while { ![vucomplete] } { update } vudestroy after 5000 } puts "TEST SEQUENCE COMPLETE" exit
公式ドキュメントに載っているスクリプトからの、構造上の大きな変更点としては、時間経過の出力や、時間切れ終了をなくすので、runtimerプロシージャはまるっと消したところですかね。
で、runtimerプロシージャを読んでいたところは、完了(vucomplete=true)するまで無限ループさせるワンライナーに置き換え。
あとは、Redis用のdisetコマンドをMySQLに置き換えるだけ。
vu(Virtual User)=同時接続数を変えながら回すところは、foreach のところですね。
ここで受けた値を「vuset vu $z」で受けてvuを作成、実行して、終わったらvuを破棄して、、、の繰り返し。
同じ条件で3回やって真ん中の値を使いたいから{1 1 1}で、とかでもいいわけで。
起動引数受けたり、冒頭で変数配列としてvu数をセットできるようにしたほうが美しいとは思いますが、個人的にはとりあえずコレで十分。
後の条件は、loadscriptの前にインタラクティブにhammerdbcliのコマンドを叩くそのまんまを書いてあげればOKなので、わかりやすいですね。
エラーハンドリングも何もしてませんw
Virtual Userがコケるとうまく止まらないことがあるので、「素直にkill -9」してください。
いざ実行
hammerdbcliに上記tclスクリプトを読み込ませてあげればOKです。
hammerdb>soruce tclスクリプトファイル
あるいは
$ ./hammerdbcli < tclスクリプトファイル
こんな感じで、連続実行走らせて翌朝?ログファイルを確認すればOK、な環境ができました。
欲を言うと、ログファイルの出力は、任意のファイル名を指定できるようにしたいけど、コマンド上はサポートされてないんだよね。
だれか機能追加してー(他力本願
まとめ
- tclスクリプトにhammardbcliコマンドを列挙することで操作が可能。
- tclスクリプトのループを回す中で変数制御して、条件を変えながら連続テストが可能
- それHammerDBの自動実行機能じゃなくね?(正解
こまけぇことはいいんだよ。
Tcl/Tkデスクトップリファレンス (Programming tools)
- 作者: ポールレインズ,Paul Raines,須栗歩人,日本ルーセントテクノロジー
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 1999/07
- メディア: 単行本
- クリック: 1回
- この商品を含むブログを見る
Tcl/Tkって、新しめの本でも2000年頃。。