Re: [HACKERS] [PATCH] Vacuum: Update FSM more frequently - Mailing list pgsql-hackers
From | Masahiko Sawada |
---|---|
Subject | Re: [HACKERS] [PATCH] Vacuum: Update FSM more frequently |
Date | |
Msg-id | CAD21AoDrSC+NCfyNYHg+GL0n0H=VLT=ZaZDkpfX4QNYikCWe+Q@mail.gmail.com Whole thread Raw |
In response to | Re: [HACKERS] [PATCH] Vacuum: Update FSM more frequently (Claudio Freire <klaussfreire@gmail.com>) |
Responses |
Re: [HACKERS] [PATCH] Vacuum: Update FSM more frequently
|
List | pgsql-hackers |
On Fri, Feb 16, 2018 at 5:00 AM, Claudio Freire <klaussfreire@gmail.com> wrote: > On Thu, Feb 15, 2018 at 4:47 PM, Claudio Freire <klaussfreire@gmail.com> wrote: >> On Wed, Feb 14, 2018 at 3:59 AM, Masahiko Sawada <sawada.mshk@gmail.com> wrote: > >>>> The final FSM vacuum pass isn't partial, to finally correct all those >>>> small inconsistencies. >>> >>> Yes, but the purpose of this patch is to prevent table bloating from >>> concurrent modifications? >> >> Yes, by *marking* unmarked space. If the slot is above the threshold, >> it means there's already marked free space on that branch, and search >> will go into it already, so no pressing need to refine the mark. The >> space already marked can serve while vacuum makes further progress. >> Ie: it can wait. > > Although... I think I see what you mean. > > If you have this: > > 255 > . 0 > . . 0 > . . 255 > . 0 > . . 64 > . . 64 > . 0 > . . 0 > . . 64 > > > A partial vacuum won't even recurse beyond the root node, so it won't > expose the free space 2 levels down. Yeah, that's what I meant. I think this might be able to happen slightly easily if a tables has fillfactor < 100. For example, updating tuples on pages that are almost packed except for fillfactor with the more bigger value > > This could be arrived at by having an almost fully packed table that > contains some free space near the end, and it gets deletions near the > beginning. Vacuum will mark the leaf levels at the beginning of the > table, and we'd like for that free space to be discoverable to avoid > packing more rows near the end where they prevent truncation. > > The patch as it is now will only vacuum that part of the FSM when the > root value drops, which usually requires all the free space on that > region of the heap to be exhausted. > > With the current recursive FSM vacuum method, however, that's > unavoidable. We can't detect that there's some free space below the > current level to be exposed without recursing into the tree, and > recursing is exactly the kind of work we want to prevent with tree > pruning. > > In all my trials, however, I did not run into that case. It must not > be easy to get into that situation, because the root node already has > ~4000 slots in it. Each of those 4000 slots should be in that > situation to keep the space at the end of the table as the sole > discoverable free space, which seems like a rather contorted worst > case. Okay, I guess that this patch cannot help in the case where the freespace of pages shown on fsm gets decreased by vacuum because the upper-level node doesn't reflect the value on the lower page. However it doesn't happen often as you said and it's the same as it is even though it happens. So I also think it would not become a problem. I'll review v4 patch. Regards, -- Masahiko Sawada NIPPON TELEGRAPH AND TELEPHONE CORPORATION NTT Open Source Software Center
pgsql-hackers by date: