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