Hi,

I find our implementation:

(1) discards the HEAP_XMAX_COMMITTED on purposes when it converts a
HEAP_XMAX_COMMITTED xmax into a mutlixid. See the branch of "else if
(old_infomask & HEAP_XMAX_COMMITTED)" in compute_new_xmax_infomask
(new_infomask is computed in GetMultiXactIdHintBits where the
HEAP_XMAX_COMMITTED is totally ignored).

(2) Again in compute_new_xmax_infomask, we have:

        else if (old_infomask & HEAP_XMAX_IS_MULTI)
        {
                MultiXactStatus new_status;

                /*
                 * Currently we don't allow XMAX_COMMITTED to be set for 
multis, so
                 * cross-check.
                 */
                Assert(!(old_infomask & HEAP_XMAX_COMMITTED));


My question is why we couldn't let HEAP_XMAX_COMMITTED with mutlixid?
IIUC there are only one "deleter xmax" in mutlixid's members, so could
we define the HEAP_XMAX_COMMITTED as the status of the "deleter xmax" in
the multixacts? With this way, it can reduce some calls of
TransactionIdDidCommit in HeapTupleSatisfiesMVCC case.


-- 
Best Regards
Andy Fan



Reply via email to