概要
読取元のテーブルからデータを取得、データの加工し、書込み先のテーブルへ書き込む場合にカラム数を増加させることにより実行時間にどれくらいの変化があるかを検証します。実装方法は「単発のinsertをレコード数繰り返す」、「bulk insert」、「insert-select」のケースで検証します。
実装方法と件数による違いはこちら「insertの投げ方による実行時間検証」
環境
Databaseサーバ
- Oracle VM VirtualBox version.4.0.8
- Oracle Enterprise Linux release 5.5
- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
プログラム実行環境(APサーバの代わり)
- Windows 7 Ultimate
- Eclipse Java EE IDE for Web Developers.Helios Service Release 1
- S2JDBC
- Java 6.0 update 18
結果
カラム数は2、100、400、700、1000で行いました。
カラム数を変化させた各実装方法の実行時間(縦軸:実行時間(秒)、横軸:カラム数)
Java側で様々な処理を行っている「単発」と「バルク」でのボトルネックはorg.seasar.extension.jdbc.util.BindVariableUtil.getCompleteSqlメソッドでした。
単発の場合は全体の実行時間の約70%、バルクの場合は約95%以上を占めていました。
カラム数1000での単発の実行時間(セルフタイムで降順)
カラム数1000でのバルクの実行時間(セルフタイムで降順)
おまけ:カラム数1000でのinsert-selectの実行時間(セルフタイムで降順)