On 2/20/07, Hannu Krosing <[EMAIL PROTECTED]> wrote:
Ühel kenal päeval, T, 2007-02-20 kell 12:08, kirjutas Pavan Deolasee: What do you do, if there are no live tuples on the page ? will this un-HOTify the root and free all other tuples in HOT chain ?
Yes. The HOT-updated status of the root and all intermediate tuples is cleared and their respective ctid pointers are made point to themselves. The index entry will be marked LP_DELETE as with the normal case. VACUUM can subsequently reclaimed these tuples, along with the index entry.
> > The intermediate heap-only tuples are removed from the HOT-update > chain. > The HOT-updated status of these tuples is cleared and their respective > t_ctid are made point to themselves. These tuples are not reachable > now and ready for vacuuming. Does this mean, that they are now indistinguishable from ordinary tuples ?
No. HEAP_ONLY_TUPLE flag is still set on these tuples. So you can distinguish those tuples. Maybe they could be freed right away instead of changing HOT-updated
status and ctid ?
Yeah, thats a good idea. I am thinking of setting LP_DELETE flag on them while pruning. The tuple then can be reused for next in-page HOT-update.
> When we run out space for update-within-the-block, we traverse > through all the line pointers looking for LP_DELETEd items. If any of > these > items have space large enough to store the new tuple, that item is > reused. > Does anyone see any issue with doing this ? Also, any suggestions > about doing it in a better way ? IIRC the size is determined by the next tuple pointer, so you can store new data without changing tuple pointer only if they are exactly the same size.
There is a lp_len field in the line pointer to store the length of the tuple. ISTM that we can reduce that while reusing the line pointer. But that would create a permanent hole in the page.
> we are > more concerned about the large tables, the chances of being able to > upgrade > the exclusive lock to vacuum-strength lock are high. Comments ? I'm not sure about the "we are more concerned about the large tables" part. I see it more as a device for high-update tables. This may not always be the same as "large", so there should be some fallbacks for case where you can't get the lock. Maybe just give up and move to another page ?
Oh, yes. I agree. The fallback option of doing COLD update always exists. Thanks, Pavan -- EnterpriseDB http://www.enterprisedb.com