8

テーブルで自動バキュームVACUUM ANALYZEクエリを実行していますが、完了するまでに常に数時間、場合によっては数日かかります。Postgres が自動バキューム ジョブをときどき実行して、クリーンアップとメンテナンス タスクを実行することは知っていますが、これは必要なことです。ただし、ほとんどのテーブルには、VACUUM ANALYZE ではなく、単に VACUUM があります。

この特定のテーブルにバキューム分析が必要な理由と、分析に時間がかかる問題を解決するにはどうすればよいですか?

別のメモとして、このバキューム分析クエリが数日前に実行されていることに気づきませんでした。これは、インデックスを作成しようとしたときで、開いているファイルが不足していると言って失敗しました (またはそのようなもの)。これは、真空分析が非常に長く実行されることに寄与する可能性がありますか?

4

2 に答える 2

4

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;"
于 2016-08-18T20:44:06.247 に答える