Return to Firebird Square

FirebirdでTPC-Rベンチマークを実行する

TPC-R benchmark test

昨年(2005年)12月12日にTHE INTERBASE & DEVELOPER MAGAZINE で紹介された、TPC-Rベンチマークの実行方法について、実際に試してみましたので結果を含めてまとめてみました。THE INTERBASE & DEVELOPER MAGAZINEは、2005年9月1日に第1号が発刊されたInterBaseとFirebirdに特化したWebzineですが、その後プリント版も販売するようになっております。編集長のAlexey Kovyazin氏IBSurgeonの作者で、ロシア語の書籍『The InterBase World』の著者の一人(FIBPlusの製造元であるDevrace社の社長Serg Vostrikov氏が共著)であって、Borland Developer NetworkでチームBのCraig Stantz氏にThanksされてしまうくらいの方です。

さて、TPC-Rについては、Transaction Processing Performance Councilが制定しているデータベースシステム用のベンチマークの一つで、1989年に制定されたTPC-Aから始まって、TPC-B/C/D/H/R/W/Appが制定されたましたが、その後TPC-A/B/D/R/Wは非推奨(Obsolete)になっていて、現状ではTPC-App/C/Hでシステムの性能を測るよう推奨されています。PostgreSQLに標準で同梱されてくるpgbenchはTPC-Bベンチマークをポーティングしたものです。

TPC-Rは、"TPC-R is a business reporting, decision support benchmark."、つまり業務上のレポーティングと意志決定支援システムに関するベンチマークということになります。

(2006/1/22)

テスト環境のセットアップ

THE INTERBASE & DEVELOPER MAGAZINEHow to run TPC-R based testから必要なファイルをダウンロード出来ますが、ここにも同じものを置いておきます。

関連ファイルの準備

用意されているのは、Windows用のバッチファイルで、Firebirdの標準コマンドラインユーティリティであるisqlを利用して、各SQL文を実行するようになっています。

それぞれ、Firebird1.5用、2.0用、Vulcan用、InterBase7.51用となっています。該当するものをダウンロードして下さい。

Firebirdのセットアップ先は、Windows版の標準インストール先ではなく、c:\firebird15等を前提としていますので、バッチファイルを修正する必要があります。

CREATEDB_FILLDB_IDX.cmdの修正点

diff -u -r1.1.1.1 CREATEDB_FILLDB_IDX.cmd --- tpcrFB15/tpcr/create/CREATEDB_FILLDB_IDX.cmd 22 Jan 2006 05:10:02 -0000 1.1.1.1 +++ tpcrFB15/tpcr/create/CREATEDB_FILLDB_IDX.cmd 21 Jan 2006 17:48:54 -0000 @@ -1 +1,3 @@ +SET PATH=%PATH%;c:\Program Files\Firebird\Firebird_1_5\bin + tpcr.cmd > CREATION_RESULTS.txt

tpcr.cmdの修正点

diff -u -r1.1.1.1 tpcr.cmd --- tpcrFB15/tpcr/create/tpcr.cmd 22 Jan 2006 05:10:02 -0000 1.1.1.1 +++ tpcrFB15/tpcr/create/tpcr.cmd 22 Jan 2006 02:27:30 -0000 @@ -1,10 +1,10 @@ echo -- renaming old tpr.gdb (if exists) -rename C:\tpc\tpcr.gdb old_tpcr.gdb +@rename C:\tpc\tpcr.gdb old_tpcr.gdb showtm echo -- run creation script -c:\Firebird15\bin\isql -i tpc_db.sql +isql -q -i tpc_db.sql showtm set ISC_USER=SYSDBA set ISC_PASSWORD=masterkey @@ -13,7 +13,7 @@ echo -run index creation script -c:\Firebird15\bin\isql -i tpc_idx.sql +isql -q -i tpc_idx.sql showtm echo - Finished. ======================

genidx.cmdの修正点

diff -u -r1.1.1.1 genidx.cmd --- tpcrFB15/tpcr/create/genidx.cmd 22 Jan 2006 05:10:02 -0000 1.1.1.1 +++ tpcrFB15/tpcr/create/genidx.cmd 22 Jan 2006 05:14:32 -0000 @@ -1 +1 @@ -c:\Firebird15\bin\isql -i tpc_idx.sql +isql -i tpc_idx.sql

RUN_TEST.cmdの修正点

diff -u -r1.1.1.1 RUN_TEST.cmd --- tpcrFB15/tpcr/RUN_TEST.cmd 22 Jan 2006 05:10:02 -0000 1.1.1.1 +++ tpcrFB15/tpcr/RUN_TEST.cmd 22 Jan 2006 08:57:09 -0000 @@ -1 +1,3 @@ -FOR /L %%q in (1,1,22) DO b.cmd %%q >>log.txt 2>&1 +@set PATH=%PATH%;c:\program files\firebird\firebird_1_5\bin + +@FOR /L %%q in (1,1,22) DO b.cmd %%q >>log.txt 2>&1

上記修正を施した修正版を以下に置いておきます。

tpcrFB15_mod.zip

ダウンロードしたファイルを解凍するとtpcrディレクトリ内にcreateディレクトリがある構造で、沢山のファイルが出てきます。これを、c:\tpc に配置して下さい。(間違いではないです。アーカイブはtpcrだけど、バッチ内ではc:\tpcが前提になっています・・・。)

c:\tpc 1.sql 10.sql 11.sql 12.sql 13.sql 14.sql 15.sql 16.sql 17.sql 18.sql 19.sql 2.sql 20.sql 21.sql 22.sql 3.sql 4.sql 5.sql 6.sql 7.sql 8.sql 9.sql b.cmd cat.exe cmp.exe cp.exe create RUN_TEST.cmd sed.exe showtm.exe sleep.exe tail.exe tpcr.txt x.sql c:\tpc\create CREATEDB_FILLDB_IDX.cmd dbgen.exe dists.dss genidx.cmd genidx2.cmd README.TXT showtm.exe tpcr.cmd tpc_db.sql tpc_idx.sql

Firebirdのセットアップ

Firebirdは、Windows版のClassicサーバー 1.5.2を使用しました。

http://sourceforge.net/project/showfiles.php?group_id=9028&package_id=29791

ここから、 Firebird-1.5.2.4731-Win32.exe をダウンロードして、実行して下さい。インストールオプションで、ClassiかSuperかを選べるので今回はClassicを選んでいます。

その他の条件は以下の通りです。

テストデータの準備

さて、例によってテストデータの作成ですが、大変時間がかかります。以下のコマンドををコマンドプロンプトから実行して下さい。

C:\TPC\create>CREATEDB_FILLDB_IDX.cmd

筆者の環境では、2時間半かかりました。作成したデータベースは再使用できるようにバックアップを取っておいた方が良いでしょう。

作成済みのデータベースをお配りしたいところですが、約1.5GBと大きいのでこれは作成してもらうしかないですね。:-)

データ作成時のログ CREATION_RESULTS.txt

C:\TPC\create>echo -- renaming old tpr.gdb (if exists) -- renaming old tpr.gdb (if exists) C:\TPC\create>rename C:\tpc\tpcr.gdb old_tpcr.gdb C:\TPC\create>showtm current time: 10172 C:\TPC\create>echo -- run creation script -- run creation script C:\TPC\create>isql -q -i tpc_db.sql C:\TPC\create>showtm current time: 10173 C:\TPC\create>set ISC_USER=SYSDBA C:\TPC\create>set ISC_PASSWORD=masterkey C:\TPC\create>dbgen -s 1 -v -D -n localhost:c:/tpc/tpcr.gdb C:\TPC\create>b C:\TPC\create>showtm current time: 15996 C:\TPC\create>echo -run index creation script -run index creation script C:\TPC\create>isql -q -i tpc_idx.sql C:\TPC\create>showtm current time: 15998 C:\TPC\create>echo -run index creation script -run index creation script C:\TPC\create>isql -q -i tpc_idx.sql C:\TPC\create>showtm current time: 18890 C:\TPC\create>echo - Finished. ====================== - Finished. ======================

TPC-Rベンチマークテストの実行

さて、それではベンチマークを取ってみましょう。以下のコマンドをコマンドプロンプトで実行します。

C:\TPC>RUN_TEST.cmd C:\TPC>FOR /L %q in (1 1 22) DO b.cmd %q 1>>log.txt 2>&1 C:\TPC>b.cmd 1 1>>log.txt 2>&1 C:\TPC>b.cmd 2 1>>log.txt 2>&1 C:\TPC>b.cmd 3 1>>log.txt 2>&1 C:\TPC>b.cmd 4 1>>log.txt 2>&1 C:\TPC>b.cmd 5 1>>log.txt 2>&1 C:\TPC>b.cmd 6 1>>log.txt 2>&1 C:\TPC>b.cmd 7 1>>log.txt 2>&1 C:\TPC>b.cmd 8 1>>log.txt 2>&1 C:\TPC>b.cmd 9 1>>log.txt 2>&1 C:\TPC>b.cmd 10 1>>log.txt 2>&1 C:\TPC>b.cmd 11 1>>log.txt 2>&1 C:\TPC>b.cmd 12 1>>log.txt 2>&1 C:\TPC>b.cmd 13 1>>log.txt 2>&1 C:\TPC>b.cmd 14 1>>log.txt 2>&1 C:\TPC>b.cmd 15 1>>log.txt 2>&1 C:\TPC>b.cmd 16 1>>log.txt 2>&1 C:\TPC>b.cmd 17 1>>log.txt 2>&1 C:\TPC>b.cmd 18 1>>log.txt 2>&1 C:\TPC>b.cmd 19 1>>log.txt 2>&1 C:\TPC>b.cmd 20 1>>log.txt 2>&1 C:\TPC>b.cmd 21 1>>log.txt 2>&1 C:\TPC>b.cmd 22 1>>log.txt 2>&1 C:\TPC>

約3時間かかりました。一番長いTEST9では、87分もかかっています。ログはかなり長くなるので、zipフォーマットで以下に置いておきます。

log_20060122.zip
#Firebird Classic Server 1.5.2 1 280 2 119 3 307 4 148 5 244 6 145 7 354 8 505 9 5264 10 282 11 143 12 136 13 612 14 237 15 104 16 40 17 44 18 138 19 243 20 1470 21 260 22 153

結論

さて、残念ながらPostgreSQLやMySQLと比較可能なTPC-Bではありませんが、これでTPC-Rを実行出来るようになりました。as3apベンチマークテストと合わせて、ぜひ皆さんも試してみて下さい。