On Sun, Aug 7, 2016 at 12:55:01PM -0400, Bruce Momjian wrote: > On Sun, Aug 7, 2016 at 10:49:45AM -0400, Bruce Momjian wrote: > > OK, crazy idea time --- what if we only do WARM chain additions when all > > indexed values are increasing (with NULLs higher than all values)? (If > > a key is always-increasing, it can't match a previous value in the > > chain.) That avoids the problem of having to check the WARM chain, > > except for the previous tuple, and the problem of pruning removing > > changed rows. It avoids having to check the index for matching key/ctid > > values, and it prevents CREATE INDEX from having to index WARM chain > > values. > > > > Any decreasing value would cause a normal tuple be created. > > Actually, when we add the first WARM tuple, we can mark the HOT/WARM > chain as either all-incrementing or all-decrementing. We would need a > bit to indicate that.
FYI, is see at least two available tuple header bits here, 0x0800 and 0x1000: /* * information stored in t_infomask2: */ #define HEAP_NATTS_MASK 0x07FF /* 11 bits for number of attributes */ /* bits 0x1800 are available */ #define HEAP_KEYS_UPDATED 0x2000 /* tuple was updated and key cols * modified, or tuple deleted */ #define HEAP_HOT_UPDATED 0x4000 /* tuple was HOT-updated */ #define HEAP_ONLY_TUPLE 0x8000 /* this is heap-only tuple */ #define HEAP2_XACT_MASK 0xE000 /* visibility-related bits */ My guess is we would need one bit to mark a WARM chain, and perhaps reuse obsolete pre-9.0 HEAP_MOVED_OFF to indicate increment-only or decrement-only. These flags have to be passed to all forward tuples in the chain so an addition to the chain knows quickly if it is WARM chain, and which direction. We can't use the bits LP_REDIRECT lp_len because we need to create WARM chains before pruning, and I don't think walking the pre-pruned chain is worth it. (As I understand HOT, LP_REDIRECT is only created during pruning.) -- Bruce Momjian <br...@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + As you are, so once was I. As I am, so you will be. + + Ancient Roman grave inscription + -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers