[pgsql-jp: 34371] Re: パフォーマンスチューニング

Ryosuke Hosoi hosoi @ ryo.com
2004年 12月 1日 (水) 17:01:47 JST


ほそいです

まず、postgresの特徴として、updateやdeleteされたとき、レコード
そのものは完全に削除されず、削除マークがつく、というのがあります。
# ほとんどのRDBMSはこういうものですが、最近の商用製品は
# updateの歳、可能ならは即座に再利用するようになってるようです
# MySQLでmyisamだと再利用です、そりゃ〜isamですので。

それを踏まえて、vacuumについて

・通常のvacuum
updateやdeleteで削除マークがついた行に再利用可能マークをつける
テーブルはロックされない
ディスクの空き領域は増えない(seq scan時の領域は変わらない)

・vacuum full
updateやdeleteで空いた古い行は切り詰められる
テーブルはロックされる
ディスクの空き領域は増える(seq scan時の領域は最小になる)

です。

vacuum fullを定常的に行いたくない(ロックを避けたい)場合も、
updateをまとめて行うバッチ処理などがあるとしたら、その前後
どちらかでvacuumを行うと、状況は改善されるかもしれません。

updateする際、インデックスされたフィールドの値もupdateしている
としたら、定常的なreindexも計画したほうがいいです。

徹底的にパフォーマンスチューニングしたい!となると
・更新されるフィールドを別テーブルに分離
・(DO INSTEADな)RULEを使用してアプリ側からはなるべくシームレスにする
なんてことも出来るかと
# あとからscheme変更をやるのはキツイですが

-- 
 Ryosuke Hosoi / 細井 良祐
 mailto:hosoi @ ryo.com http://www.ryo.com/
 PGP Public Key http://www.ryo.com/ryo/hosoi.ryo.com.asc
 fingerprint = 4F39 61B0 2034 3A5C DFE8  FBCB 7B99 90CF EBE1 A3F3



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