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したい