「テストのためなど、大量のデータを作成するとき、COMMITの回数が増えるとそのオーバーヘッドによりデータの作成に時間がかかる」と言われています。わりと知られている情報なので、ご存知の方もいるのではないでしょうか。しかし、実際どれくらい遅くなるかを試した方はそれほどいないのではないかと思います。
1回ずつコミット、ある件数単位でコミット、最後にまとめてコミット、などによりどのような速度の違いがあるか、法則性はあるのかを具体的に検証していきたいと思います。

検証内容
適当なテーブルを作成、同件数の大量データを作成し、コミット回数を変化させ、そのデータ作成にかかる時間を計測します。今回は SI Object Browser(以下OB)に搭載されている、データ生成機能を利用します。
詳細は以下の通りです。
■検証詳細
・サンプルテーブルに10万件のデータを作成
・その際、COMMITを作成件数1件に1回、10件に1回、100件に1回、1,000件に1回、
10,000件に1回、100,000件に1回 、またOBのデフォルト値である50件に1回で行い、
それぞれデータ生成終了までの時間を計測
・それぞれ5回実施し、中間の結果を採用する
・一回の検証ごとにテーブルデータを削除し、DBバッファキャッシュをクリア
・データ生成には OBのデータ生成機能を使用
■データ生成機能
OBにはデータ生成機能というものがあります。これは指定件数分データを自動で作成する機能です。パフォーマンステストなど大量のデータが必要な場合非常に役立つ機能です。
単独テーブルのデータを生成する通常機能のほか、親テーブル(マスタデータ)を意識したデータや、既存データをUPDATEし、住所などをマスキングした状態にすることも可能です。

図1:データ生成画面
各項目には連番やランダムな値、住所・氏名電話番号等あらかじめ用意されたテンプレートから選択することも可能です。今回の検証ではCOL1に連番、COL2に乱数値(数値)を選択しました。
つづいて、今回の検証テーマであるコミット回数についてです。OBでは、こちらも任意の数に設定が可能です。
メニューバー ツール→オプション→詳細設定タブ にあります、「データ生成ツールコミット件数」に指定した件数ごとにコミットが可能ですので、こちらの値を生成ごとに切り替えていきます。(デフォルトは50)

図2:コミット実施件数の指定
※使用するOBは今回の検証用にデータ生成時間を計測できるよう
カスタマイズされています。現在の製品版には時間計測機能はありません。
検証環境
今回の検証環境は以下の通りです。
| マシン | OS | Windows7 |
| CPU | Intel Core i7-3770 3.40GHz | |
| メモリ | 8GB | |
| その他 | 特に無し | |
| DB | 対象RDBMS | Oracle11.0.2.0.1.0 |
| テーブル名 | TEST_COMMIT | |
| テーブル項目 | COL1(NUMBER10),COL2(NUMBER10) ※主キー設定なし |