Gregory Stark <gsstark@xxxxxxx> writes: > I must be misunderstanding Tom's comment then. > What I'm referring to is lazy_vacuum_rel() calls vacuum_set_xid_limits with > the relisshared flag of the relation. vacuum_set_xid_limits passes that to > GetOldestXmin as the allDbs parameter. GetOldestXmin ignores transactions not > connected to the same database unless allDbs is true. The problem is the indirect effect of other backends' xmin values, which are computed across all live backends. In the current structure, it's hard to see how to fix this except by making each backend compute and advertise both a global and database-local xmin. This seems a bit ugly. Also, someone asked recently whether we could avoid counting prepared xacts when figuring vacuum cutoffs, which seems a fair question --- but again, how to do that without doubling the number of advertised xmin values yet again? I'm starting to feel that we've reached the limits of this system of accounting for live XIDs, but I have no idea what the next step might look like... regards, tom lane