PostgreSQL 9.1 COPY vs pg_bulkload

先々週の続き。
今度はpg_bulkloadとCOPY処理の比較という観点で測定してみた。

測定環境と測定内容

測定環境は前回・前々回と同じ。

  • ロードデータ:2592000件のXML文字列(ファイルサイズ約1GB)
  • 比較対象:以下の組み合わせ
    • XML型/TEXT型
    • 通常テーブルへのCOPY/UNLLOGEDテーブルへのCOPY/pg_bulkload(通常モード)/pg_bulkload(並列モード)

測定結果

XML TEXT型
通常テーブルへのCOPY 58126.714 22930.184
UNLLOGEDテーブルへのCOPY 47997.477 14488.658
pg_bulkload(通常モード) 42734.223 9653.667
pg_bulkload(並列モード) 38335.477 9534.594

グラフにするとこんな感じ。


まとめ

  • テキスト型の場合、PostgreSQL 9.1のUNLOGGEDテーブルでも結構効果は高いが、pg_bulkloadはUNLLOGGEDよりも更に高速。
  • クラッシュ時の保証が必要な場合、かつ高速ロードが必要なら、PostgreSQL 9.1でもpg_bulkloadは有用。
  • XML型の場合はUNLOGGEDテーブルや、pg_bulkloadで高速化してもXMLパース時間の割合が大きいため、あまり効果が見えない。