[pgsql-jp: 26071] Re: 7.2 の vacuum

Tatsuo Ishii t-ishii @ sra.co.jp
2002年 5月 22日 (水) 11:38:48 JST


石井です.

> int4 型の serial と varchar 型の prop、という2つのフィールドを持ち、
> prop は非常にまちまちな長さを持つ (数十bytes から数百Kbytes 以上まで)
> レコードが数万件はいっていて、毎日数百万回 update されている table が
> あります。
> 
> daily で vacuum をかけているのですが、7.2 に upgrade してから、この
> table だけ領域の再利用が行われないのか、table の実体 (data/base 以下
> にあるファイル) がすごい勢いで巨大化してしまいました。vacuum をかけて
> も増加率が一向に小さくなりません (レコードが本当に増加しているわけでは
> ないことは確認しました)。
> 
> 結局、vacuum full を行うことで disk 領域は開放されたのですが、この
> table のように、極端に異なる大きさのレコードがたくさん update される
> ような場合、7.2 の通常の vacuum では領域の再利用が行われなくなってし
> まう、ということがあるのでしょうか?いわゆるフラグメンテーションが発生
> している?

「フラグメンテーション」問題は関係ないと思います.

まず気になるのが,「巨大化した」テーブルのサイズです.VACUUMをかける前
にどの位の大きさになっていましたか?標準の設定では,78MB以上の空き領域
をVACUUMは管理しないので,78MB以上の大きさのテーブルをうまく管理できな
い可能性があります.postgresql.conf の max_fsm_pages * 8192 が問題のテー
ブルの(VACUUM直前の)物理サイズ(単位:バイト)よりも十分大きくなるように
してください.

また,このようにUPDATEが頻繁な環境でVACUUMが1日1回しか行われないのは
不足だと思います.ご存じのようにFULLなしのVACUUMはロックしないので,過
負荷にならない限りはもっと頻繁にVACUUMするべきだと思います.1時間に1回
でもいいんじゃないでしょうか?

ところで,問題になっているテーブルに類似したテーブルが他にもたくさんあ
る,ということはないですよね?その場合は max_fsm_pages をもっと増やす
必要があります.
--
Tatsuo Ishii



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