PostgreSQL 9.1 COPY vs pg_bulkload
先々週の続き。
今度はpg_bulkloadとCOPY処理の比較という観点で測定してみた。
測定環境と測定内容
測定環境は前回・前々回と同じ。
- ロードデータ:2592000件のXML文字列(ファイルサイズ約1GB)
- データファイルとPostgreSQLデータベースクラスタは別Disk
- 比較対象:以下の組み合わせ
- 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パース時間の割合が大きいため、あまり効果が見えない。