[pgsql-jp: 36261] Re: JDBCバッチ更新による性能向上

EBIHARA Yuichiro ebihara @ iplocks.co.jp
2005年 10月 25日 (火) 19:09:02 JST


海老原です。
お返事いただいた皆様、どうもありがとうございました。

とりあえず実測の価値あり、と思ったので100,000件の連続Insertでテストして
みました。

■環境
PostgreSQL 7.3.4 on Red Hat 9
Sun Java 1.4.2

■テストパターン
下記3パターンを3回ずつ試行。

1)No Batch
PreparedStatement#executeUpdate()を100,000回繰り返す。
コミットは最後に1回。

2)Batch and No ServerPrepare
PreparedStatement#addBatch()を100,000回繰り返す。
ただし1000回毎にexecuteBatch()実行。
コミットは最後に1回。

3)With Batch and ServerPrepare
PGStatement#setUseServerPrepare(true)を事前に実行。
後は2と同じ。

各試行の前で以下のクリーンアップをやっています。
・TRUNCATE
・VACUUM FULL
・PostgreSQL再起動

■テスト結果
1)No Batch
33.184s / 31.981s / 32.085s (平均32.417s)

2)Batch and No ServerPrepare
31.253s / 31.855s / 32.446s (平均31.851s)

3)With Batch and ServerPrepare
31.656s / 29.878s / 29.304s (平均30.280s)

・・・数10%程度の性能向上を期待していたのですが、微妙な結果です。
テストのやり方に問題がある可能性もありますが。
かなり激しくI/Oが飛びましたので、I/Oに余裕のある環境ならもう少し差が開く
かもしれません。

--
海老原 雄一郎 / EBIHARA, Yuichiro
  Email: ebihara @ iplocks.co.jp





pgsql-jp メーリングリストの案内