見出し画像

YugabyteDBベンチマーク with BenchBase

NewSQLの1つであるYugabyteDBのベンチマークをやってみます!
当たり前ですが、データベースのベンチマークをするには、事前にDBを構築しないといけません。
これをサクッと10分で構築するやり方はこちらです!

どんなベンチマークをとるのか?

NewSQLはOLTP(オンライントランザクションプロセッシング)向けのデータベースですね。なので、今回はOLTP向けのTPC-Cによるベンチマークを実施します。

TPC-Cのベンチマークができるツールはいろいろありますが、今回はBenchBaseを使いたいと思います。
ちなみにYugabyteDBでもBenchBase(OLTPBench)をフォークして作ったツールがあるみたいです。

※OLTPBenchはBenchBaseの前身となるプロジェクトです

当社比、みたいな感じだと微妙なので公平に評価出来そうなYugabyte以外のベンチマークツールを使うことにします。
ちなみにYugabyteが公表しているベンチマーク結果はここから確認出来ます。

BenchBaseでは何が出来るの?

BenchBaseとは各種DBのベンチマークを取得できるオープンソースプロジェクトです。JDBCを使って各種DBのベンチマークが実行できるフレームワークとなっています。

今回はTPC-Cを使いますが、OLAP向けのTPC-H、NoSQLやKVS向けのYCSBなどいろんな種類のベンチマークをサポートしています。
これがいろんなDBに対して実行できるなんてすごいですね!

TPC-Cをちょっとだけ深く考えてみる

実際に実行する前に、そもそもTPC-Cとは、どんなワークロードが実行されているのかを考えてみましょう!
TPC-Cがシミュレートするビジネスは、部品の卸売業者の業務です。部品を保管しておく倉庫と、部品を売る営業地区が出てきます。
処理の内容としては以下の5つがあります。

  1. 注文

  2. 支払い記録

  3. 注文状況照会

  4. 配送

  5. 在庫状況照会

卸売業者のオペレーターが注文を受けて、在庫を確認したり、注文を入力したり、注文状況を照会したり、支払いと配送を入力したり、とイメージが掴めると思います。
このオペレーターが複数いるって感じですね。

次のようなER図となり、倉庫の数を5とすると、それぞれの件数は比例関係で決まります。業務が拡大すると倉庫が増えて、それぞれのデータ件数も増えるよね、ってことです。

倉庫を5とした場合の関連データの件数

それぞれの処理のCRUDと比率は次の通りです。

TPC-Cで取得したい値はtpm-Cといわれる1分あたりの注文数です。

BenchBaseによるTPC-Cベンチマーク

ここまでで、どんな処理をやるのかがイメージ着いたので、ここから実際のベンチマーク実行をやってみたいと思います!
コンテナーで実行できそうなので、それでやってみます。

まずはヘルプを表示してみる!

docker run benchbase.azurecr.io/benchbase -h

おお!イメージがダウンロードされヘルプが表示できました!

-bでベンチマーク種別、-cでベンチマーク設定ファイルを指定すれば良さそうです。

ベンチマーク設定ファイルを事前に準備する必要がありそうなので、ここからファイルを取得します。YugabyteDBはPostgreSQL互換なので、PostgreSQL用TPC-C設定ファイルを使います。
https://github.com/cmu-db/benchbase/blob/main/config/postgres/sample_tpcc_config.xml

「localhost:5432/benchbase」の部分をYugabyteDB Managedのホスト名、ポート(5433)に変更して、デフォルトではyugabyteというデータベースが作られているのでそれを指定します。
なおYugabyteDB Managedのホスト名はYugabyte ManagedのWebコンソールのSettingsタブの「Connection Parameters」より確認できます。
そしてユーザーadminはYugabyteDB Managed作成時に作ったので、パスワードのみ変更します。
変更した設定ファイルはyugabyte_tpcc_config.xmlというファイル名でconfigフォルダ配下に保存します。

    <!-- Connection details -->
    <type>POSTGRES</type>
    <driver>org.postgresql.Driver</driver>
    <url>jdbc:postgresql://${YugabyteDB Managed Host}:5433/yugabyte?sslmode=disable&amp;ApplicationName=tpcc&amp;reWriteBatchedInserts=true</url>
    <username>admin</username>
    <password>${password}</password>
    <isolation>TRANSACTION_SERIALIZABLE</isolation>
    <batchsize>128</batchsize>
    … 以下略 …

さて、いよいよ実行!
最後の--create、--load、--executeはヘルプの際に表示されていた、データベースを初期化し、データをロードし、ベンチマークを実行するためのパラメーターです。
コマンドは見やすいように改行しています。

docker run -it --rm \
    --env BENCHBASE_PROFILE=postgres \
    -v %CD%/config:/benchbase/config \
    -v results:/benchbase/results:rw \
        benchbase.azurecr.io/benchbase \
            -b tpcc \
            -c /benchbase/config/yugabyte_tpcc_config.xml \
            --create true \
            --load true \
            --execute true

おーっと!エラーになってしまいました。

SSLを有効にする必要があるみたいなのでyugabyte_tpcc_config.xmlのsslmodeを変更します。

    <url>jdbc:postgresql://${YugabyteDB Managed Host}:5433/yugabyte?sslmode=disable&amp;ApplicationName=tpcc&amp;reWriteBatchedInserts=true</url>
       ↓↓↓変更↓↓↓
    <url>jdbc:postgresql://${YugabyteDB Managed Host}:5433/yugabyte?sslmode=require&amp;ApplicationName=tpcc&amp;reWriteBatchedInserts=true</url>

気を取り直して再度実行!!

BenchBaseの実行が出来ました!
これでベンチマーク準備が整ったので次回は気合をいれてベンチマークしていきたいと思います!

この記事が気に入ったらサポートをしてみませんか?