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 MAGAZINEのHow 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を選んでいます。
その他の条件は以下の通りです。
- OS:Windows2000SP4
- CPU:Pentium4 2.4A
- Mem:1GB PC2700DDR
- HDD:WDC WD600AB IDE UDMA-5
テストデータの準備
さて、例によってテストデータの作成ですが、大変時間がかかります。以下のコマンドををコマンドプロンプトから実行して下さい。
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ベンチマークテストと合わせて、ぜひ皆さんも試してみて下さい。