Set cutoff xmin more aggressively when vacuuming a temporary table.
Tom Lane <tgl@sss.pgh.pa.us>
Set cutoff xmin more aggressively when vacuuming a temporary table. Since other sessions aren't allowed to look into a temporary table of our own session, we do not need to worry about the global xmin horizon when setting the vacuum XID cutoff. Indeed, if we're not inside a transaction block, we may set oldestXmin to be the next XID, because there cannot be any in-doubt tuples in a temp table, nor any tuples that are dead but still visible to some snapshot of our transaction. (VACUUM, of course, is never inside a transaction block; but we need to test that because CLUSTER shares the same code.) This approach allows us to always clean out a temp table completely during VACUUM, independently of concurrent activity. Aside from being useful in its own right, that simplifies building reproducible test cases. Discussion: https://postgr.es/m/3490536.1598629609@sss.pgh.pa.us
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/access/heap/vacuumlazy.c | modified | +1 −0 |
| src/backend/commands/cluster.c | modified | +17 −11 |
| src/backend/commands/vacuum.c | modified | +49 −24 |
| src/include/commands/cluster.h | modified | +2 −1 |
| src/include/commands/vacuum.h | modified | +1 −0 |
Discussion
- More aggressive vacuuming of temporary tables 12 messages · 2020-08-28 → 2020-10-29