On 4 August 2015 at 06:03, Jeff Janes <jeff.ja...@gmail.com> wrote:
> The attached proof of concept patch greatly improves the bloat for both > the insert and the update cases. You need to turn on both features: adding > the pages to fsm, and vacuuming the fsm, to get the benefit (so JJ_GIN=3). > The first of those two things could probably be adopted for real, but the > second probably is not acceptable. What is the right way to do this? > Could a variant of RecordFreeIndexPage bubble the free space up the map > immediately rather than waiting for a vacuum? It would only have to move > up until it found a page with freespace already recorded in it, which the > vast majority of the time would mean observing up one level and then not > writing to it, assuming the pending list pages remain well clustered. > You make a good case for action here since insert only tables with GIN indexes on text are a common use case for GIN. Why would vacuuming the FSM be unacceptable? With a large gin_pending_list_limit it makes sense. If it is unacceptable, perhaps we can avoid calling it every time, or simply have FreeSpaceMapVacuum() terminate more quickly on some kind of 80/20 heuristic for this case. -- Simon Riggs http://www.2ndQuadrant.com/ <http://www.2ndquadrant.com/> PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services