Re: Eager page freeze criteria clarification - Mailing list pgsql-hackers
From | Andres Freund |
---|---|
Subject | Re: Eager page freeze criteria clarification |
Date | |
Msg-id | 20230928010748.57xlbwtmycnw7onj@alap3.anarazel.de Whole thread Raw |
In response to | Re: Eager page freeze criteria clarification (Peter Geoghegan <pg@bowt.ie>) |
Responses |
Re: Eager page freeze criteria clarification
|
List | pgsql-hackers |
Hi, On 2023-09-27 17:43:04 -0700, Peter Geoghegan wrote: > On Wed, Sep 27, 2023 at 5:20 PM Melanie Plageman > <melanieplageman@gmail.com> wrote: > > > Can you define "unfreeze"? I don't know if this newly invented term > > > refers to unsetting a page that was marked all-frozen following (say) > > > an UPDATE, or if it refers to choosing to not freeze when the option > > > was available (in the sense that it was possible to do it and fully > > > mark the page all-frozen in the VM). Or something else. > > > > By "unfreeze", I mean unsetting a page all frozen in the visibility > > map when modifying the page for the first time after it was last > > frozen. > > I see. So I guess that Andres meant that you'd track that within all > backends, using pgstats infrastructure (when he summarized your call > earlier today)? That call was just between Robert and me (and not dedicated just to this topic, fwiw). Yes, I was thinking of tracking that in pgstat. I can imagine occasionally rolling it over into pg_class, to better deal with crashes / failovers, but am fairly agnostic on whether that's really useful / necessary. > And that that information would be an important input for VACUUM, as opposed > to something that it maintained itself? Yes. If the ratio of opportunistically frozen pages (which I'd define as pages that were frozen not because they strictly needed to) vs the number of unfrozen pages increases, we need to make opportunistic freezing less aggressive and vice versa. > ISTM that the concept of "unfreezing" a page is equivalent to > "opening" the page that was "closed" at some point (by VACUUM). It's > not limited to freezing per se -- it's "closed for business until > further notice", which is a slightly broader concept (and one not > unique to Postgres). You don't just need to be concerned about updates > and deletes -- inserts are also a concern. > > I would be sure to look out for new inserts that "unfreeze" pages, too > -- ideally you'd have instrumentation that caught that, in order to > get a general sense of the extent of the problem in each of your > chosen representative workloads. This is particularly likely to be a > concern when there is enough space on a heap page to fit one more heap > tuple, that's smaller than most other tuples. The FSM will "helpfully" > make sure of it. This problem isn't rare at all, unfortunately. I'm not as convinced as you are that this is a problem / that the solution won't cause more problems than it solves. Users are concerned when free space can't be used - you don't have to look further than the discussion in the last weeks about adding the ability to disable HOT to fight bloat. I do agree that the FSM code tries way too hard to fit things onto early pages - it e.g. can slow down concurrent copy workloads by 3-4x due to contention in the FSM - and that it has more size classes than necessary, but I don't think just closing frozen pages against further insertions of small tuples will cause its own set of issues. I think at the very least there'd need to be something causing pages to reopen once the aggregate unused space in the table reaches some threshold. Greetings, Andres Freund
pgsql-hackers by date: