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つがあります。
注文
支払い記録
注文状況照会
配送
在庫状況照会
卸売業者のオペレーターが注文を受けて、在庫を確認したり、注文を入力したり、注文状況を照会したり、支払いと配送を入力したり、とイメージが掴めると思います。
このオペレーターが複数いるって感じですね。
次のようなER図となり、倉庫の数を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&ApplicationName=tpcc&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&ApplicationName=tpcc&reWriteBatchedInserts=true</url>
↓↓↓変更↓↓↓
<url>jdbc:postgresql://${YugabyteDB Managed Host}:5433/yugabyte?sslmode=require&ApplicationName=tpcc&reWriteBatchedInserts=true</url>
気を取り直して再度実行!!
BenchBaseの実行が出来ました!
これでベンチマーク準備が整ったので次回は気合をいれてベンチマークしていきたいと思います!
この記事が気に入ったらサポートをしてみませんか?