Thread: Possible to trigger autovacuum?
Is it possible to launch an autovacuum from within an extension?
I'm developing an index access method. After the index gets built it needs some cleanup and optimization. I'd prefer to do this in the amvacuumcleanup() method so it can happen periodically and asynchronously.
I could fire up a background worker to do the job, but it would be a lot simpler to call please_launch_autovacuum_right_now();
--
Chris Cleveland
312-339-2677 mobile
On Mon, Feb 19, 2024 at 03:15:29PM -0600, Chris Cleveland wrote: > Is it possible to launch an autovacuum from within an extension? > > I'm developing an index access method. After the index gets built it needs > some cleanup and optimization. I'd prefer to do this in the > amvacuumcleanup() method so it can happen periodically and asynchronously. > > I could fire up a background worker to do the job, but it would be a lot > simpler to call please_launch_autovacuum_right_now(); The autovacuum launcher can be stopped in its nap with signals, like a SIGHUP. So you could rely on that to force a job to happen on a given database based on the timing you're aiming for. -- Michael
Attachment
On 2024-Feb-19, Chris Cleveland wrote: > Is it possible to launch an autovacuum from within an extension? > > I'm developing an index access method. After the index gets built it > needs some cleanup and optimization. I'd prefer to do this in the > amvacuumcleanup() method so it can happen periodically and > asynchronously. Autovacuum has a mechanism to be requested work -- grep the tree for AutoVacuumRequestWork and AutoVacuumWorkItemType. Currently its only use is BRIN autosummarization, but it's possible to add others by patching the core code. If you want to propose the idea of making it extensible, I think it would serve not only your present use case but plenty of others, too. -- Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/