• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PostgreSQL8.3系のAutovacuum不備?)

PostgreSQL8.3系のAutovacuum不備?

このQ&Aのポイント
  • 現在、8.3.3を使用しておりますが、最近応答がかなり重くなりまして手動にてvaccumを実施し対処しました。
  • 自動実行されない模様です(閾値が合わない)。そもそもチューニングすべき物なのでしょうか?
  • 今回の質問は、PostgreSQLのバージョン8.3系でAutovacuumの不備についてです。最近、システムの応答が遅くなり、手動でVACUUMを実行する必要がありました。また、Autovacuumが自動的に実行されていないことが分かりました。これはどのような原因が考えられるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada59
  • ベストアンサー率74% (29/39)
回答No.1

VACUUM が適切に実行されずに性能が低下していることを前提として回答します。 更新頻度の高い巨大なテーブルが存在する場合には、自動バキュームの設定をテーブルごとに調整したほうがいいと思います。 デフォルトの設定のままでは、UPDATE や DELETE で不要になった行が 50 行 (autovacuum_vacuum_threshold) + 全行数の 2 割 (autovacuum_vacuum_scale_factor) を超えた場合に VACUUM が実行されます。 例えば、テーブルの行数が 100,000 行の場合には不要な行が 20,050 行を超えると VACUUM が実行されますが、100,000,000 の場合には 20,050,000 行を超えるまで実行されません。同じ 2 割であっても 2 万行と 2 千万行では性能への影響が違います。 PostgreSQL 8.3 であれば、pg_autovacuum テーブルにエントリを追加すればテーブルごとに自動バキュームの設定を行うことができます (参考 URL を見てください)。 あと、その他に気になることとしては、デフォルトでは自動バキュームで同時に起動できる VACUUM は 3 つ (autovacuum_max_workers) までなので、更新頻度の高いテーブルが大量に存在する場合には、自動バキュームが特定のテーブルへの VACUUM につきっきりになってしまい、VACUUM の実行されないテーブルが発生して性能が低下してしまう場合があります。

参考URL:
http://www.postgresql.jp/document/8.3/html/catalog-pg-autovacuum.html
JACK_TOSHI
質問者

お礼

yamada59様 早々のレスありがとう御座います。 大変参考に成ります。 92テーブルの内、1、2テーブルが日の更新作業にて、 1万数千レコードのごみデータが、発生します。 社内テスト用DBサーバで試しまして、本番へ適用したいと思います。