Re: Old row version in hot chain become visible after a freeze
Alvaro Herrera <alvherre@2ndquadrant.com>
From: Alvaro Herrera <alvherre@2ndquadrant.com>
To: "Wong, Yi Wen" <yiwong@amazon.com>
Cc: Michael Paquier <michael.paquier@gmail.com>, Peter Geoghegan <pg@bowt.ie>, "Wood, Dan" <hexpert@amazon.com>, "pgsql-bugs@postgresql.org" <pgsql-bugs@postgresql.org>
Date: 2017-09-08T16:42:44Z
Lists: pgsql-bugs
Wong, Yi Wen wrote: > There is actually another case where HEAPTUPLE_DEAD tuples may be kept and have > prepare_freeze skipped on them entirely. > > lazy_record_dead_tuple may fail to record the heap for later pruning > for lazy_vacuum_heap if there is already a sufficiently large number of dead tuples > in the array: Hmm, ouch, good catch. AFAICS this is a shouldn't-happen condition, since we bail out of the loop pessimistically as soon as we would be over the array limit if the next page were to be full of dead tuples (i.e., we never give the chance for overflow to actually happen). So unless I misunderstand, this could only fail if you give maint_work_mem smaller than necessary for one pageful of dead tuples, which should be about 1800 bytes ... If we wanted to be very sure about this we could add a test and perhaps abort the vacuum, but I'm not sure it's worth the trouble. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Commits
-
Fix freezing of a dead HOT-updated tuple
- fb6de78a291b 9.5.10 landed
- d149aa762c05 9.3.20 landed
- 46c35116ae1a 10.0 landed
- 3a135bdb1b5e 9.6.6 landed
- 232c7cbcbbc6 9.4.15 landed
- 20b655224249 11.0 landed
-
Fix potential data corruption during freeze
- 31b8db8e6c1f 10.0 cited
-
Clarify the contract of partition_rbound_cmp().
- f1dae097f294 10.0 cited