PG 9.1 から PG 9.5 へのアップグレードにより、多数のテーブルが XID フリーズ制限に達する状況が発生しました。その結果、実行中のシステムは多くのテーブルで autovacuum プロセスを実行しており、その多くは「(ラップアラウンドを防ぐため)」を示しています。この時点までは非常にビジーなデータベースだったので、私は驚きません。
自動バキュームにこれを実行させないようにすることはできず、そうするのは悪い考えであるため、そうでなければアイドル状態のデータベースを再構成して、自動バキュームを高いアクティビティ率で実行するようにしました。仕事に戻る。
postgres.conf に一時的に次のように設定しましたが、うまく機能しているようです。本当にI / Oクランキングを取得します。システムに大きく依存するため、WAL サイズとトランザクションを最適化する追加の設定は省略しています。
# TEMPORARY -- aggressive autovacuum
autovacuum_max_workers = 16 # max number of autovacuum subprocesses
autovacuum_vacuum_cost_delay = 4ms # default vacuum cost delay for
# autovacuum, in milliseconds;
autovacuum_vacuum_cost_limit = 10000 # default vacuum cost limit for autovacuum
db サーバーを停止して起動し、次のようなシェル呼び出しを使用して発生するトランザクションを監視します。
watch -d -n 300 psql -c "select query from pg_stat_activity;"