Postgresql9.1の UNLOGGED TABLE を試してみた

http://lets.postgresql.jp/documents/technical/9.1/


Postgresql 9.1 から追加されたUNLOGGED TABLE。
WALログに一切書かれないので追加更新削除のパフォーマンスが良いらしい。
一連のバッチ処理などでの一時表の代わりに使ったり、
レポート集計テーブルなど失っても復活出来るようなテーブルには使えるでしょう。
Oracleのダイレクトロードみたいなのは欲しいなと常々思ってたのですが
代替方法として使えないかなーと思いちょっと適当なベンチを実行してみました。

適当なベンチ方法

一行辺り約300byte程度、数千万件のレコードを
copyコマンドでロードした実行した結果を比べてみました。
環境はEC2のsmallインスタンスです。
ちなみにスキーマはプロダクト環境で使っているものなので公表しません。

通常のテーブルでcopyにかかった時間

\copy normal_table (....)
Time: 114273.985 ms

UNLOGGEDテーブルでcopyにかかった時間

\copy unlogged_table (....)
Time: 89854.931 ms


何度か実行してみましたが、だいたいこのくらいでした。
およそ10%アップといったところでしょうか。
予想よりはそんなにパフォーマンスに違いはありませんでした。
ただ今回はinsertのみの結果なので
updateやdeleteなど混ぜたときにはまた違う結果になるでしょう。*1
またpostgresql.confの設定によっても変わるでしょうね。

とりあえず

create unlogged table するだけで
更新性能はアップするようです!

*1:時間があればpg_benchしたい