Re: why there is not VACUUM FULL CONCURRENTLY?

From: Antonin Houska <ah(at)cybertec(dot)at>
To: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: Marcos Pegoraro <marcos(at)f10(dot)com(dot)br>, Michael Banck <mbanck(at)gmx(dot)net>, Junwang Zhao <zhjwpku(at)gmail(dot)com>, Kirill Reshke <reshkekirill(at)gmail(dot)com>, Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>, Michael Paquier <michael(at)paquier(dot)xyz>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: why there is not VACUUM FULL CONCURRENTLY?
Date: 2025-03-31 14:26:25
Message-ID: 104580.1743431185@localhost
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Antonin Houska <ah(at)cybertec(dot)at> wrote:

> Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> wrote:
>
> > On 2025-Mar-22, Antonin Houska wrote:
> >
> > > Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> wrote:
> > >
> > > > I rebased this patch series; here's v09. No substantive changes from v08.
> > > > I made sure the tree still compiles after each commit.
> >
> > I rebased again, fixing a compiler warning reported by CI and applying
> > pgindent to each individual patch. I'm slowly starting to become more
> > familiar with the whole of this new code.
>
> I'm trying to reflect Robert's suggestions about locking [1]. The next version
> should be a bit simpler, so maybe wait for it before you continue studying the
> code.

This is it. A few notes:

* Since there's no unlocking during the processing now, the code to check for
catalog changes was removed.

* Some code moved from 0004 to 0005, where it fits better. (Also the commit
messages of these two parts elaborated a bit more.)

* Regarding the progress monitoring, I do in 0004 what I proposed in [1]:
BeginInternalSubTransaction() now sets a flag that avoids clearing of the
progress state in AbortSubTransaction()

* Although I consider 0005 (Preserve visibility information of the concurrent
data changes.) important, it occurs to me now that it might introduce quite
some overhead.

* 0003 is new in the series. I thought it'll be needed, then I realized it's
not. It might be useful as refactoring though. Please let me know if I
should maintain it or drop it.

[1] https://www.postgresql.org/message-id/80297.1742989179%40localhost

--
Antonin Houska
Web: https://www.cybertec-postgresql.com

Attachment Content-Type Size
v11-0001-Add-REPACK-command.patch text/x-diff 89.8 KB
v11-0002-Move-conversion-of-a-historic-to-MVCC-snapshot-to-a-.patch text/x-diff 5.4 KB
v11-0003-Move-the-recheck-branch-to-a-separate-function.patch text/x-diff 4.8 KB
v11-0004-Add-CONCURRENTLY-option-to-REPACK-command.patch text/plain 137.0 KB
v11-0005-Preserve-visibility-information-of-the-concurrent-da.patch text/x-diff 57.3 KB
v11-0006-Add-regression-tests.patch text/x-diff 10.6 KB
v11-0007-Introduce-repack_max_xlock_time-configuration-variab.patch text/x-diff 20.4 KB
v11-0008-Enable-logical-decoding-transiently-only-for-REPACK-.patch text/x-diff 22.6 KB
v11-0009-Call-logical_rewrite_heap_tuple-when-applying-concur.patch text/x-diff 26.0 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Aleksander Alekseev 2025-03-31 14:37:39 Re: encode/decode support for base64url
Previous Message Tomas Vondra 2025-03-31 14:11:39 Re: Improve monitoring of shared memory allocations