スマートスタイル TECH BLOG

sysbench 1.0 でオリジナルのベンチマークシナリオを作成する

MySQLのベンチマークツール

MySQLのベンチーマークツールで一般的によく使われるのは以下のようなものがあります。

今回はこの中の sysbench の最新バージョンの 1.0 系で Lua スクリプトを使ったオリジナルのベンチマークシナリオの作成方法について解説します。

カスタムシナリオ

sysbench 1.0 ではLuaスクリプトでオリジナルのベンチマークシナリオを作成することが可能になりましたが、ドキュメントやAPIの仕様など、まとまった情報はまだありません。
現状では、sysbench 作者によるスライド資料から読み解くか、デフォルトで使えるOLTPのシナリオもLuaスクリプトで書かれているので、詳細はそこから読み解く必要がありそうです。

参考

前提条件

sysbench 1.0 がインストールされている必要があります。
インストール方法は以下のページを参考に行って下さい。

GitHub – akopytov/sysbench: Installing from Binary Packages

sysbench からコールされるメソッド

sysbenchのデータベースのシナリオでは prepare / run / cleanup と3つのコマンドがあります。
Luaスクリプトでは下記の例のように、これらに対応したメソッドがコールされることになります。

イベントとは?

run コマンドを実行した際に、eventメソッドが繰り返しコールされます。
sysbenchではeventメソッドが実行された回数をトランザクションと定義しています。
そのため、例えばベンチマークの実行時間を10秒と設定すると、このeventメソッドが10秒間連続して実行され、その実行回数がトランザクション数としてカウントされることになります。

スレッドとは?

sysbenchではデータベースへの同時接続数は複数のスレッドを同時実行することで実現しています。そのため、スレッドはスレッド単位でシナリオファイルを実行することになるため、連続する一意な値を作成する場合は他のスレッドと値が衝突しないように、thread_idと組み合わせて使うような注意が必要です。

sequence.lua

実行

テーブル作成

thread数を4で実行

シナリオのLuaファイルにオプション定義を記載しなくても、--mysql-*のグローバルオプションはそのまま使えます。

実行結果

スレッド単位で独立して採番しているのがわかるかと思います。

カスタムレポート

sysbench 1.0 では --report-interval= オプションで出力されるレポートをカスタマイズすることが出来るようになりました。

メソッド定義

下記のようにフックメソッドを定義すると--report-intervalオプションで指定した秒数毎にコールされます。

オリジナルベンチマークの実装サンプル

以下は、eventメソッドで挿入処理を繰り返し、カスタムレポートでデータベースサイズを取得してLTSV形式でレポートを出力するオリジナルベンチマークの実装サンプルになります。

コード

実行結果

まとめ

ドキュメントやマニュアルがあまり無いのですが、sysbenchがインストールされていれば、Luaスクリプトを書くだけで独自のベンチマークシナリオを簡単に作ることができました。

  • 特殊なワークロードのため、一般的なベンチマークの結果が使えない
  • 自身のシステムの処理を再現して、できるだけ正確な性能限界を知りたい
  • MySQLやPostgreSQLの新機能や特定の処理のベンチマークを取りたい

上記の場合などで、sysbenchによるオリジナルベンチマークを作るのを検討してはいかがでしょうか?


MySQL

 

Return Top