> > But what about index clearing? When do you scan each index?
>
> At the end of each iteration (or earlier, depending on
> maintenance_work_mem). So for each iteration you would need
> to scan the indexes.
>
> Maybe we could make maintenance_work_mem be the deciding
> factor; after scanning the indexes, do the release/reacquire
> locks cycle.
But you could do the indexes first and remember how far you can
vacuum the heap later.
So you might as well do each index separately first and remember
how far you can go with the heap for each one.
Then do the heap with a special restriction that comes from what you
remembered from the indexes.
You can now separate the heap vacuum in arbitrarily large transactions,
since the indexes are already taken care of.
(You only vacuum to the point of the eldest vacuumed index)
Andreas