Re: BRIN FSM vacuuming questions
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Alvaro Herrera <alvherre@alvh.no-ip.org>
Cc: pgsql-hackers@lists.postgresql.org
Date: 2018-04-03T17:39:36Z
Lists: pgsql-hackers
Attachments
- brin-fsm-management-fixes.patch (text/x-diff) patch
I wrote: > [ assorted complaining about BRIN FSM management ] Here's a proposed patch for this. Changes: * Do RecordPageWithFreeSpace unconditionally in brin_page_cleanup, and do FreeSpaceMapVacuum unconditionally in brin_vacuum_scan. Because of the FSM's roundoff behavior, the old complications here weren't really buying any savings. * Elsewhere, we are trying to update the FSM for just a single-page status update, so use FreeSpaceMapVacuumRange() to limit how much of the upper FSM gets traversed. * Fix a couple of places that neglected to do the upper-page vacuuming at all after recording new free space. If the policy is to be that BRIN should do that, it should do it everywhere. * Remove premature RecordPageWithFreeSpace call in brin_getinsertbuffer where it's about to return an extended page to the caller. The caller should do that, instead, after it's inserted its new tuple. Fix the one caller that forgot to do so. * Simplify logic in brin_doupdate's same-page-update case by postponing brin_initialize_empty_new_buffer to after the critical section; I see little point in doing it before. * Avoid repeat calls of RelationGetNumberOfBlocks in brin_vacuum_scan. * Avoid duplicate BufferGetBlockNumber and BufferGetPage calls in a couple of places where we already had the right values. * Move a BRIN_elog call out of a critical section; that's pretty unsafe and I don't think it buys us anything to not wait till after the critical section. * I moved the "*extended = false" step in brin_getinsertbuffer into the routine's main loop. There's no actual bug there, since the loop can't iterate with *extended still true, but it doesn't seem very future-proof as coded; and it's certainly not documented as a loop invariant. * Assorted comment improvements. The use of FreeSpaceMapVacuumRange makes this a HEAD-only patch. I'm not sure if any of the other changes are worth back-patching. regards, tom lane
Commits
-
Improve FSM management for BRIN indexes.
- 1383e2a1a937 11.0 landed