BLOBのインサートテスト

Firebirdの特徴 (Factsheet)
マッピング検証
What's new in Firebird v1.5
動作検証資料
Firebird1.5について
Embeded Server
Linuxでのcronバックアップの例
FirebirdとOOo(OpenOffice.org)
1.0.2リリースノート日本語版
How InterBase came to be
As Jim Starkey remembers it
Interbase With a Small 'b'
BLOBのインサートテスト
PHP4 RPM for Redhat Linux9
JayBirdとShiftJIS データベース
InterBase World Interview



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ファイルでサーバを設定しないとエラーログを吐く不具合修正。

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

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

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

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

3BlobIns.exeを実行して下さい。
4スピンエディットでインサート回数を設定し、Startボタンを押すと開始します。
5途中で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)


Firebird 2.1.6がリリースされました。2.1系の最終リリースとなります。ここからダウンロードしてください。今後は2.5と3.0の開発が継続されます(2014年12月03日)
powered by Sylph version.1.0 rc4 / ©1998-2004.DipMeshSystems .

AltStyle によって変換されたページ (->オリジナル) /