[pgsql-jp: 31773] テーブルの更新について

Hashimoto, Masaru hashimoto-m @ comtecc.net
2003年 12月 12日 (金) 13:00:07 JST


いつも参考にさせて頂いております。橋本と申します。
以下についてご存じでしたらご教授頂けませんでしょうか?
(長文で失礼致します。)

環境:
  RedHat Linux 9
  PostgreSQL 7.3.2

約80万件のレコードが登録されているテーブルがあるのですが、
SELECT、INSERT等の処理が遅くなったため、1日毎に実行していた
VACUUMを1時間毎に実行するように変更しました。
(これにより、処理速度はほぼ改善されました)

その後、pgstattuple にてテーブルのサイズを確認したところ、
tuple_percentが約20%、free_percentが約75%と、不要な領域が
かなり多かったため、dropdb=>createdbでDBを再作成して
対応しました。

これにより、tuple_percentが95%以上、free_percentが約2%となり、
2分以上かかっていたVACUUMの処理時間も数秒まで短縮されました。

ところが、その日のアクセスが集中する時間帯になると、前日よりも
サーバに負荷がかかった状態となってしまいました。
(load averageで見ると 約0.9 から約1.6 と倍近い状態)

そこでご質問なのですが、
1.テーブルを更新するときに、フリー領域が少ないとテーブルの
  サイズが増えていくと思いますが、この時の更新処理は、VACUUMを
  実行した後のフリー領域を再利用する場合よりも負荷が高くなる
  ものなのでしょうか?
  (単純に考えると、物理的に増えるから高くなりそうな気がしますが)

2.レコード数 0 件のテーブルにVACUUMを実行した後、pgstattuple で
  確認したところ、table_lenが 0 となっていました。
  これは、実際の物理サイズも少なくなっているのでしょうか?
  (VACUUM FULLは実行していません)

どうぞよろしくお願い致します。






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