Hi all, A customer reported that during parallel index vacuum, the oldest xmin doesn't advance. Normally, the calculation of oldest xmin (ComputeXidHorizons()) ignores xmin/xid of processes having PROC_IN_VACUUM flag in MyProc->statusFlags. But since parallel vacuum workers don’t set their statusFlags, the xmin of the parallel vacuum worker is considered to calculate the oldest xmin. This issue happens from PG13 where the parallel vacuum was introduced. I think it's a bug.
Moreover, the same problem happens also in CREATE/REINDEX CONCURRENTLY case in PG14 or later for the same reason (due to lack of PROC_IN_SAFE_IC flag). To fix it, I thought that we change the create index code and the vacuum code so that the individual parallel worker sets its status flags according to the leader’s one. But ISTM it’d be better to copy the leader’s status flags to workers in ParallelWorkerMain(). I've attached a patch for HEAD. Regards, -- Masahiko Sawada EDB: https://www.enterprisedb.com/
copy_status_flags.patch
Description: Binary data