我正在调查我们的 autovacuum 设置的问题,并last_autoanalyze
试图last_autovacuum
从pg_stat_all_tables
.
我理解 autovacuum 以增量方式工作,批量压缩和清理死元组,然后休眠片刻,等等。那是什么last_autovacuum
意思?autovacuum 是否可能大部分时间都在工作,但时间戳可能永远不会更新(例如,因为无法删除元组)?
我为我们的表看到的许多时间戳都是旧的,即使我相当确定我在某些表上观察到一个正在运行的 autovacuum 线程。
编辑:如果我不清楚,我的问题是:确实last_autovacuum
意味着......
- 增量 autovacuum 进程上次完成此表上的大量工作并休眠的时间
- autovacuum 进程运行到表格最后的时间
- 以上,但前提是没有无法删除的元组
- 别的东西
我也想知道这一点,所以我对 Postgres src 代码进行了一些挖掘以尝试找出...
https://github.com/postgres/postgres/blob/ca3b37487be333a1d241dab1bbdd17a211a88f43/src/backend/catalog/system_views.sql#L584
https://github.com/postgres/postgres/blob/ca3b37487be333a1d241dab1bbdd17a211a88f43/src/backend/utils/adt/pgstatfuncs.c#L267
https://github.com/postgres/postgres/blob/ca3b37487be333a1d241dab1bbdd17a211a88f43/src/include/pgstat.h#L740
因此,如果我正确地遵循了代码,那么
last_autovacuum
时间戳似乎是进程开始的时间,而不是结束的时间。last_autovacuum 只不过是 autovacuum 守护进程最后一次对表执行清理过程的时间
pg_stat_all_tables视图将为当前数据库中的每个表(包括 TOAST 表)包含一行,显示有关对该特定表的访问的统计信息
有关更多信息,请参阅 postgresql 统计收集器页面https://www.postgresql.org/docs/9.6/static/monitoring-stats.html