Re: Vacuum ERRORs out considering freezing dead tuples from before OldestXmin
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Robert Haas <robertmhaas@gmail.com>
Cc: Melanie Plageman <melanieplageman@gmail.com>, Peter Geoghegan <pg@bowt.ie>, Pg Hackers <pgsql-hackers@postgresql.org>, Noah Misch <noah@leadboat.com>
Date: 2024-06-25T17:10:26Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Test that vacuum removes tuples older than OldestXmin
- 2c0bc4765741 17.6 landed
- 303ba0573ce6 18.0 landed
- 80c34692e8e6 17.0 landed
- aa607980aee0 18.0 landed
-
Lower minimum maintenance_work_mem to 64kB
- 2eda3df9ad53 17.0 landed
- bbf668d66fbf 18.0 landed
-
Add accidentally omitted test to meson build file
- 9d198f4d3e3b 16.4 landed
-
Use DELETE instead of UPDATE to speed up vacuum test
- 924a08b76f5d 14.13 landed
- 9744fe24118b 15.8 landed
- 571e0ee40ebd 16.4 landed
-
Revert "Test that vacuum removes tuples older than OldestXmin"
- efcbb76efe40 18.0 landed
- 1a3e90948b50 17.0 landed
-
Ensure vacuum removes all visibly dead tuples older than OldestXmin
- fd4f12df5e46 17.0 landed
- 83c39a1f7f3f 18.0 landed
Hi, On 2024-06-25 12:31:11 -0400, Robert Haas wrote: > On Tue, Jun 25, 2024 at 11:39 AM Melanie Plageman > <melanieplageman@gmail.com> wrote: > > On Tue, Jun 25, 2024 at 10:31 AM Robert Haas <robertmhaas@gmail.com> wrote: > > > On Tue, Jun 25, 2024 at 9:07 AM Andres Freund <andres@anarazel.de> wrote: > > > > It's not hard - but it has downsides. It'll mean that - outside of vacuum - > > > > we'll much more often not react to horizons going backwards due to > > > > hot_standby_feedback. Which means that hot_standby_feedback, when used without > > > > slots, will prevent fewer conflicts. > > > > > > Can you explain this in more detail? > > > > If we prevent GlobalVisState from moving backward, then we would less > > frequently be pushing the horizon backward on the primary in response > > to hot standby feedback. Then, the primary would do more things that > > would not be safely replayable on the standby -- so the standby could > > end up encountering more recovery conflicts. > > I don't get it. hot_standby_feedback only moves horizons backward on > the primary, AFAIK, when it first connects, or when it reconnects. > Which I guess could be frequent for some users with flaky networks, > but does that really rise to the level of "much more often"? Well, the thing is that with the "prevent it from going backwards" approach, once the horizon is set to something recent in a backend, it's "sticky". If a replica is a bit behind or if there's a long-lived snapshot and disconnects, the vistest state will advance beyond where the replica needs it to be. Even if the standby later reconnects, the vistest in long-lived sessions will still have the more advanced state. So all future pruning these backends do runs into the risk of performing pruning that removes rows the standby still deems visible and thus causes recovery conflicts. I.e. you don't even need frequent disconnects, you just need one disconnect and sessions that aren't shortlived. That said, obviously there will be plenty setups where this won't cause an issue. I don't really have a handle on how often it'd be a problem. Greetings, Andres Freund