マルチ DBMS ベンチマークツール BenchBase を MySQL で使ってみる

目次

はじめに

今回の記事では、BenchBase というベンチマークツールについて紹介してみたいと思います。

弊社では、データベースの性能評価やワークロードのシミュレーション、検証にベンチマークツールをよく使用しています。

主に MySQL 用のベンチマークツールとしてメジャーな以下の利用頻度が高いです。

もし TPC ベンチマーク(派生ワークロード)を実行したい場合は、以下のツールを個別で準備することになります。

今回、これらのツールでは実装されていない(または実行できない)、とあるベンチマークを実行する要件があり、それが実現できる BenchBase にたどり着きました。

試用してみたところ、非常に使い易い便利なソフトウェアだったので、普及がてら紹介させていただきます。

上に挙げたベンチマークツール各種については、弊社の過去ブログ記事でも取り上げていますので、ぜひチェックしてみてください。

BenchBase とは

カーネギー・メロン大学データベースグループのプロジェクトで開発された OSS のベンチマークフレームワークです。

GitHub – cmu-db/benchbase: Multi-DBMS SQL Benchmarking Framework via JDBC
BenchBase – Carnegie Mellon Database Group

元々は OLTP-Bench として開発されていたものを進化・改名したプロジェクトだそうです。

以下が主な特徴として挙げられます。

  1. 多数の商用・オープンソースDBMS に対応しています。

    • PostgreSQL
    • MySQL
    • MariaDB
    • Oracle
    • SQL Server
    • CockroachDB
    • SQLite
    • Apache Phoenix
    • Spanner
  2. 多種多用なベンチマークスイートを BanchBase から実行することができます。
    現在のバージョンでは、16種類ものベンチマークが実装されています。

    • AuctionMark
    • CH-benCHmark
    • Epinions.com
    • NoOp
    • OT-Metrics
    • Resource Stresser
    • SEATS
    • SIBench
    • SmallBank
    • TATP
    • TPC-C
    • TPC-H
    • Twitter
    • Voter
    • Wikipedia
    • YCSB

    様々なワークロードをシミュレートするベンチマークが揃っている他、負荷掛け用のものも用意されています。
    各ベンチマークの説明については、以下から参照できます。

    Home · cmu-db/benchbase Wiki · GitHub

  3. Java で開発されており、JDBC ドライバを介してデータベースアクセスを行います。

    XML の設定ファイルでワークロード定義し、コマンドラインでオプションを指定して実行します。

    インストールも容易で、設定を柔軟に行うことができ、実行方法も分かりやすいです。

    ベンチマークの再現・再実行がしやすい設計となっています。

    また、新たなワークロード(独自ベンチマークなど)の追加やデータベースへの対応を容易に拡張できるようなつくりになっています。

  4. スループットやレイテンシなどのベンチマーク結果が自動的にレポートファイル(JSON,CSV)として生成されます。

インストール

今回使用した環境構成は以下の通りです。

  • ベンチマーク実行クライアント

  • ベンチマーク対象データベース

    本記事では MySQL 8.4 を対象に検証を行いました。

ベンチマーク実行クライアントに BenchBase をインストールします。

現時点のリリースバージョンでは、 Java 23 で動作します。

https://github.com/cmu-db/benchbase/issues/612

jar ファイルの直接の提供はないので(将来的には予定している模様)、ソースコードから実行形式バイナリをコンパイルして使用します。

docker なら java インストール不要で実行できますので、環境によっては docker も使えるのが良いところです。

https://github.com/cmu-db/benchbase?tab=readme-ov-file#how-use-with-docker

  1. 今回の例では Oracle JDK 23 をインストールします。

  2. Github リポジトリからソースコードをクローンし、mvnw コマンド一発でビルドできます。

    -P オプションで実行対象の DBMS プロファイル名を指定することがポイントです。

    コンパイル後、HSQLDB を使って内部で動作テストが行われます。
    実行環境にもよりますが数分間かかるので、しばらく待ちましょう。

    無事完了すると、target ディレクトリ配下に実行用ファイル一式のディレクトリ(benchbase-mysql)が圧縮アーカイブされて生成されています。
    このままの場所でも、任意の場所に移動しても可能です。

実行方法、オプションの説明

コマンドラインヘルプを表示させてみましょう。

--bench--config が必須オプションとのことです。

具体的には以下のように指定して、データロードや実行要否を組み合わせて実行します。

なお、--monitor-type オプションについては、PostgreSQL と SQL Server のみ有効で、MySQL は未実装で今後対応予定とのことです。
デフォルトでは、SHOW GLOBAL VARIABLESSHOW STATUS をベンチマーク実行に収集してくれますが、
さらにパフォーマンススキーマや SHOW ENGINE INNODB STATUS も追加になりそうで期待大です。

WIP: stubbing out MySQL advanced monitoring support by bpkroth · Pull Request #550 · cmu-db/benchbase · GitHub

--dialects-export で実行 SQL をエクスポートしたり、--json-histograms でベンチマーク結果のヒストグラム統計情報 JSON データを出力できるのも便利です。

TPC-C で試してみる

TPCベンチマークの、OLTP 向けテストとしてメジャーな TPC-C を試してみたいと思います。

まずは、対象データベースにベンチマーク用のユーザとスキーマを作成しておきます。(権限は検証のため ALL 指定)

つぎに設定ファイルを編集していきます。

設定ファイルは config/mysql ディレクトリ内に各ベンチマークごとにサンプルが用意されています。

今回は sample_tpcc_config.xml を変更して使います。

benchbase/config/mysql/sample_tpcc_config.xml at main · cmu-db/benchbase · GitHub

便宜上 XML の内容を分割してセクションごとに解説していきます。

最初の箇所はデータベース接続情報です。

jdbc:mysql://localhost:3306/benchbase の部分と <username>,<password>を、環境に合わせて修正します。

MySQL Connector/J の JDBC ドライバプロパティもここで設定できます。

BanchBase が使用する JDBC ドライバの名称やバージョンは、mvn の pom.xml から確認できます。

benchbase/pom.xml at main · cmu-db/benchbase · GitHub

現在のバージョンで、MySQL プロファイルの場合は MySQL Connector/J 8.0.30 が使用されています。

また、トランザクション分離レベルは以下から選択可能で、デフォルトは TRANSACTION_SERIALIZABLE です。

  • TRANSACTION_SERIALIZABLE
  • TRANSACTION_READ_COMMITTED
  • TRANSACTION_REPEATABLE_READ
  • TRANSACTION_READ_UNCOMMITTED

今回の検証環境の例では、以下のように修正しました。

次に Scale factor の設定箇所です。

TPC-C の場合、倉庫数となり、テストデータ量の調整を行います。

次の箇所がワークロード定義です。

  • terminals は同時実行クライアント数を指定します。今回は 10 に変更しました。
  • time はベンチマーク実行時間(秒)を設定します。
  • rate は秒間リクエスト数の制限値を設定します。
    • 制限不要な場合は disabled、無制限にする場合は unlimited と設定します。
  • weights はそのベンチマーク内で実行される各トランザクションの実行数比率(重み付け)を設定します。

最後のセクションが、ベンチマーク固有のトランザクションタイプごとの設定です。
TPC-C ベンチマークでは5つのトランザクションが定義されています。
前述の weights はこれらに対して重み付けを設定することになります。

また、このサンプルの設定ファイルではコメントアウトされていますが、実行前後の待ち時間を設定可能なようです。

実行準備が整ったら、さっそくベンチマークを実行してみます。

テーブル作成、データロードを行った後、ワークロード実行という流れになります。

状況に応じて、データロードのみを行う、ワークロード実行のみを行う、という指定も可能です。

テキスト量が多いですが、標準出力された内容を載せておきます。

実行結果のデータは、results ディレクトリに自動生成されています。

性能指標値の確認は、summary.json に記録されています。

スループット(グッドプット)およびレイテンシの統計情報を確認することができます。

他の TPC-C ベンチマークツールの結果出力は…

参考までに、TPC-C 派生ワークロードが実行可能な別ツール(冒頭にて説明)のベンチマーク実行結果の表示内容と比較してみます。

  • tpcc-mysql

    TPC-C のベンチマークスコア TpmC が表示されます。(1分間あたりに処理可能なトランザクション数)

  • sysbench-tpcc

    read/write 数の内訳など、sysbench 共通の出力結果を得られますが、TpmC スコアは表示されません。

おわりに

BenchBase は多用なワークロードを模したベンチマークを、ひとつのツールで実行できる環境が作成できるソフトウェアです。

設定や拡張も柔軟性があり、ベンチマークの再実行・再現もしやすいのが特徴的でした。

異種データベース間の性能比較や、単体の負荷試験にも活用できます。

また、開発・メンテナンスも止まっておらず、今後の機能拡充なども期待できます。
(Contributing も歓迎されています)

使い勝手は非常に良好でしたので、ベンチマークツールを探していたり、気になっていたら是非試してみてください!

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃MySQLのサポート業務に従事している有資格者で構成された技術サポートチームがMySQLに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次