pg_stat_all_tables.last_autovacuum 什么时候更新?

jbe*_*man 5 postgresql autovacuum

我期待与我们的自动清理的问题,并试图了解last_autoanalyzelast_autovacuumpg_stat_all_tables

我理解 autovacuum 以增量方式工作,批量压缩和清理死元组,然后休眠片刻,等等。那么是什么last_autovacuum意思?是否有可能 autovacuum大部分时间都在工作,但时间戳可能永远不会更新(例如,因为无法删除元组)?

我看到的许多表的时间戳都很旧,尽管我相当确定我在某些表上观察到了一个正在运行的 autovacuum 线程。

编辑:如果我不清楚,我的问题是:确实last_autovacuum意味着......

  • 增量 autovacuum 进程最后完成此表上的大量工作并休眠的时间
  • autovacuum 过程一直工作到桌子最后的时间
  • 以上,但前提是没有无法删除的元组
  • 别的东西

Ane*_*pic 4

我也想知道这一点,所以我深入研究了 Postgres src 代码,试图找出答案......

https://github.com/postgres/postgres/blob/ca3b37487be333a1d241dab1bbdd17a211a88f43/src/backend/catalog/system_views.sql#L584

pg_stat_get_last_autovacuum_time(C.oid) as last_autovacuum,
Run Code Online (Sandbox Code Playgroud)

https://github.com/postgres/postgres/blob/ca3b37487be333a1d241dab1bbdd17a211a88f43/src/backend/utils/adt/pgstatfuncs.c#L267

result = tabentry->autovac_vacuum_timestamp;
Run Code Online (Sandbox Code Playgroud)

https://github.com/postgres/postgres/blob/ca3b37487be333a1d241dab1bbdd17a211a88f43/src/include/pgstat.h#L740

TimestampTz autovac_vacuum_timestamp;   /* autovacuum initiated */
Run Code Online (Sandbox Code Playgroud)

因此,如果我正确地遵循了代码,那么last_autovacuum时间戳似乎是进程开始的时间,而不是进程完成的时间。