Simon Riggs wrote:
> > I need clarification here.  Is removing dead heap tuple always going to
> > require an index scan, or was this just for chilling a row (adding an
> > index)?
> 
> We can remove a tupled marked HEAP_ONLY_TUPLE when it is status
> HEAPTUPLE_DEAD. The HEAP_UPDATE_ROOT tuple can be reduced to a
> TupleStub, but not removed. Multiple tuples in the chain can be removed,
> though the HEAP_UPDATE_ROOT's t_ctid must be modified to point to the
> first non-removed tuple in the chain. All of that can be done when we
> hold a CleanupLock on the block, without reference to the indexes; this
> can be performed on-demand, when we attempt an UPDATE. This is similar
> to what already happens prior to a btree split operation. (This could
> also be performed by bgwriter, but that isn't proposed at this time
> because the buffer transit time through the cache is often not long
> enough to allow tuples to die and get benefit from space reuse).
> 
> TupleStubs can be marked for removal by a pointer-swing operation during
> normal VACUUM, i.e. it will require touching the indexes.

OK, that sounds like a good plan.  Thanks.

-- 
  Bruce Momjian  <[EMAIL PROTECTED]>          http://momjian.us
  EnterpriseDB                               http://www.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +

---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

               http://archives.postgresql.org

Reply via email to