Re: New IndexAM API controlling index vacuum strategies

Masahiko Sawada <sawada.mshk@gmail.com>

From: Masahiko Sawada <sawada.mshk@gmail.com>
To: Peter Geoghegan <pg@bowt.ie>
Cc: PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2021-03-11T11:41:17Z
Lists: pgsql-hackers
On Wed, Mar 3, 2021 at 12:40 PM Peter Geoghegan <pg@bowt.ie> wrote:
>
> On Tue, Mar 2, 2021 at 6:44 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote:
> > A scale type parameter seems good to me but I wonder if how users can
> > tune that parameter. We already have tuple-based parameters such as
> > autovacuum_vacuum_scale_factor/threshold and I think that users
> > basically don't pay attention to that table updates result in how many
> > blocks.
>
> Fair. The scale thing was just a random suggestion, nothing to take
> too seriously.
>
> > The third idea is a VACUUM command option like DISABLE_PAGE_SKIPPING
> > to disable such skipping behavior. I imagine that the
> > user-controllable-option to enforce both heap vacuum and index vacuum
> > would be required also in the future when we have the vacuum strategy
> > feature (i.g., incremental vacuum).
>
> Yeah, I'm worried about conflicting requirements here -- this patch
> and the next patch (that pushes the same ideas further) might have
> different requirements.
>
> I think that this patch will mostly be useful in cases where there are
> very few LP_DEAD-containing heap pages, but consistently more than
> zero. So it's probably not easy to tune.
>
> What we might want is an on/off switch. But why? DISABLE_PAGE_SKIPPING
> was added because the freeze map work in 9.6 was considered high risk
> at the time, and we needed to have a tool to manage that risk. But
> this patch doesn't seem nearly as tricky. No?

I think the motivation behind on/off switch is similar. I was
concerned about a case where there is a bug or something so that we
mistakenly skip vacuums on heap and indexes. But this feature would
not be as complicated as freeze map and only skips the part of
changing LP_DEAD to LP_UNUSED I agree it seems not to be essential.

Regards,

-- 
Masahiko Sawada
EDB:  https://www.enterprisedb.com/



Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Don't truncate heap when VACUUM's failsafe is in effect.

  2. Teach VACUUM to bypass unnecessary index vacuuming.

  3. Add wraparound failsafe to VACUUM.

  4. Truncate line pointer array during VACUUM.

  5. Remove tupgone special case from vacuumlazy.c.

  6. Refactor lazy_scan_heap() loop.

  7. Propagate parallel VACUUM's buffer access strategy.

  8. Simplify state managed by VACUUM.

  9. Notice that heap page has dead items during VACUUM.

  10. Adjust lazy_scan_heap() accounting comments.

  11. Use full 64-bit XID for checking if a deleted GiST page is old enough.

  12. Fix some problems with VACUUM (INDEX_CLEANUP FALSE).