[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 メーリングリストの案内