Re: Bug in VACUUM FULL ? - Mailing list pgsql-hackers

From Pavan Deolasee
Subject Re: Bug in VACUUM FULL ?
Date
Msg-id 2e78013d0703101006p32cc5c08j88a8e275303e2cd9@mail.gmail.com
Whole thread Raw
In response to Re: Bug in VACUUM FULL ?  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Bug in VACUUM FULL ?  ("Pavan Deolasee" <pavan.deolasee@gmail.com>)
List pgsql-hackers


On 3/10/07, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Although this shouldn't happen anymore after fixing the chaining
conditions, I'm inclined to introduce an additional test to verify that
the starting tuple is actually MOVED_OFF after we finish the chain move.
If not, give up on repair_frag the same as in some other corner cases.

scan_heap() would usually have collected the DEAD tuple in offsets_free
list. How do you plan to check if the tuple is in middle on a chain which has
RECENTLY_DEAD tuple before the tuple under check ? Don't we need
to collect the TID of the DEAD tuple in the vtlinks[] as well to establish
the backward chains ?
 


[ raised eyebrow... ] You sure about that?  If you replace an XID
before OldestXmin with one after, or vice versa, ISTM you *could*
be creating a problem.  "Committed" is not good enough.  So it looks
to me like you can't remove a DEAD tuple whose predecessor is only
RECENTLY_DEAD.


I also thought about it. For HOT, since we are only talking about the
HOT-update chain within the page, ISTM it should be OK to change
the xmin of the next tuple. I can see the following two cases:

Case 1:

Say, OldestXmin = 17

10,20    20,18   18,16    16,14    14,22      22,0
RD       RD       D         D          RD        L

After we remove the two DEAD tuples, the HOT-chain would
look like:

10,20    20,18    18,22      22,0
RD       RD        RD        L

Case 2:

Say, OldestXmin = 17

10,20    20,18   18,16    16,14    14,0
RD       RD       D         D          L

After we remove the two DEAD tuples, the HOT-chain would
look like:

10,20    20,18    18,0
RD       RD        L    

In both the cases, the modified HOT-chain looks sane to me.
I understand that when we walk backward in the chain, we would
have "break" at the second last tuple in Case 1 and the last tuple
in the Case 2, but with the modified chain we shall walk backward
to the first tuple in the chain.

Do you see any issue here ? Anyways, if you plan to fix the problem
in a different way for the current implementation, I can use the same
for HOT.

Thanks,
Pavan

--

EnterpriseDB     http://www.enterprisedb.com

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: what can be wrong? backport plpgpsm to 8.1
Next
From: "Pavan Deolasee"
Date:
Subject: Re: Bug in VACUUM FULL ?