アカウント


 



Firebird日本ユーザー会はFirebird Foundation の公式スポンサーです
Firebird日本ユーザー会は
Firebird Foundation の
公式スポンサーです

 


■BLOBのインサートテスト (2004/1/17 林 務)


 firebird-jp-generalに投稿した、BLOBのインサートに関するテストプログラムとレポートです。

BLOB_INSERT_TEST_0-2.LZH (IBX版)
BLOB_INSERT_TEST_BDE_0-2.LZH (BDE版。BDEがインストールされていないと実行できません。)
BLOB_INSERT_RSC.LZH (使用した画像リソース。実行には不要です。)
※変更点(ver.0.2)
・コネクションタイムを統計から排除。
・iniファイルでサーバを設定しないとエラーログを吐く不具合修正。

・使用方法
①CREATE.SQLのSQL文をISQL等で実行して下さい。
 データベースのパスは必要に応じて変更して下さい。

②DM_BLob.iniを編集して下さい。

[DATABASE]
SERVER=Localhost
DBFILE=E:DBBLOB1.FDB
UserID=SYSDBA
Passwd=masterkey

説明の必要はないかと思いますが、先ほどのファイル配置に合わせて変更し、またIDとパスワードを適宜設定して下さい。

③BlobIns.exeを実行して下さい。
④スピンエディットでインサート回数を設定し、Startボタンを押すと開始します。
⑤途中でStopボタンを押せば中断することができます。

■テスト(1) --- Delphi6 + IBX6.08

サーバはローカルのFirebird 1.0.3へLocalhostでローカル接続しました。

マシンスペックは、Pentium4 2.4G + Mem 1GB + Diskは新品のSeagate 160GBです。

10万レコードのインサートを行った結果が以下のようになりました。

※下の最大値・平均値は、開始時のコネクションタイムが入ってしまっていました。ただいま追試中です。
--- 100000回 Insert の平均 :  65.19925ミリ秒
--- 100000回 Insert の最大 :  3134ミリ秒
--- 100000回 Insert の最小 :  20ミリ秒

--- 100000回 Insert の平均 :  21.23ミリ秒
--- 100000回 Insert の最大 :  70ミリ秒
--- 100000回 Insert の最小 :  10ミリ秒

ファイルのサイズは以下のようになりました。

2004/01/17  14:21        2,048,008,192 BLOB1.FDB
2004/01/17  14:21        2,048,008,192 BLOB2.FDB
2004/01/17  14:21        2,048,008,192 BLOB3.FDB
2004/01/17  14:21        2,048,008,192 BLOB4.FDB
2004/01/17  14:21        1,231,175,680 BLOB5.FDB

■テスト(1)-2 --- Delphi6 + IBX6.08 10万行インサート後の追加

テスト結果(1)の10万行インサート後に、再度コネクトし100行のインサートを行った。

--- 100回 Insert の平均 :  30.05ミリ秒
--- 100回 Insert の最大 :  761ミリ秒
--- 100回 Insert の最小 :  10ミリ秒

■テスト(1)-3 --- Delphi6 + IBX6.08 with Firebird 1.5 RC8

テスト(1)-1と同一の内容を、Firebird 1.5 RC8で行った結果。
※と思ったら、10,000回になってました。要追試。

--- 10000回 Insert の平均 :  20.7689ミリ秒
--- 10000回 Insert の最大 :  41ミリ秒
--- 10000回 Insert の最小 :  10ミリ秒

--- 100000回 Insert の平均 :  10.75ミリ秒
--- 100000回 Insert の最大 :  261ミリ秒
--- 100000回 Insert の最小 :  10ミリ秒

■テスト(1)-4 --- Delphi6 + IBX6.08 with Firebird 1.5 RC8 1万行インサート後の追加

テスト(1)-2と同一の内容を、Firebird 1.5 RC8で行った結果。
※これも1万行インサート後なので、要追試。

--- 100回 Insert の平均 :  23.53ミリ秒
--- 100回 Insert の最大 :  330ミリ秒
--- 100回 Insert の最小 :  10ミリ秒

--- 100回 Insert の平均 :  16.47ミリ秒
--- 100回 Insert の最大 :  651ミリ秒
--- 100回 Insert の最小 :  10ミリ秒

■テスト(2) --- Delphi6 + BDE

BDE版の結果です。接続方法をBDEに変更した他、BDEでのLocalhost指定がエラーとなるため、ローカル接続で計測しました。

--- 100000回 Insert の平均 :  33.99ミリ秒
--- 100000回 Insert の最大 :  81ミリ秒
--- 100000回 Insert の最小 :  20ミリ秒

■テスト(2)-2 --- Delphi6 + BDE 10万行インサート後の追加

テスト結果(2)の10万行インサート後に、再度コネクトし100行のインサートを行った。

--- 100回 Insert の平均 :  2006.08ミリ秒
--- 100回 Insert の最大 :  198465ミリ秒
--- 100回 Insert の最小 :  10ミリ秒

ログは以下のようになっています。

0回目Insert時間 ---  198465ミリ秒
1回目Insert時間 ---  10ミリ秒
2回目Insert時間 ---  10ミリ秒
・・・以下大体同じ

■テスト(2)-3 --- Delphi6 + BDE with Firebird 1.5 RC8

テスト(2)-1と同一の内容を、Firebird 1.5 RC8で行った結果。

--- 100000回 Insert の平均 :  22.01ミリ秒
--- 100000回 Insert の最大 :  280ミリ秒
--- 100000回 Insert の最小 :  10ミリ秒

■テスト(2)-4 --- Delphi6 + BDE with Firebird 1.5 RC8 10万行インサート後の追加

テスト(2)-2と同一の内容を、Firebird 1.5 RC8で行った結果。

--- 100回 Insert の平均 :  2023.61ミリ秒
--- 100回 Insert の最大 :  200238ミリ秒
--- 100回 Insert の最小 :  10ミリ秒

■考察

 テスト(1)とテスト(2)で有意に差があるのが、10万件インサート後の再インサート時の問題です。BDEでは、0からのインサートではIBXより遅いものの平均してそれなりの速度でインサートに成功しています。しかし、いったん切断した後で再接続しインサートしようとした場合、1件目のインサートで極端に遅くなります。IBXも確かに再接続後の1件目が少し遅いのですが、問題とならない範囲です。
 このことから、大量のBLOBインサートを伴う、大規模データベースでは、BDEよりもIBXを使うべきであるという結論が導き出されるかと思います。(20041/17)


The Firebird FAQ(英文)が公開されています。(2007/08/26)
powered by Sylph  version.1.0 rc4 / ©1998-2004.DipMeshSystems .