Re: [PATCH] pageinspect function to decode infomasks
Craig Ringer <craig@2ndquadrant.com>
From: Craig Ringer <craig@2ndquadrant.com>
To: Moon Insung <Moon_Insung_i3@lab.ntt.co.jp>
Cc: PostgreSQL Hackers <pgsql-hackers@postgresql.org>, Julien Rouhaud <rjuju123@gmail.com>, Pavan Deolasee <pavan.deolasee@2ndquadrant.com>, Álvaro Herrera <alvherre@2ndquadrant.com>, Peter Eisentraut <peter.eisentraut@2ndquadrant.com>, Masahiko Sawada <sawada.mshk@gmail.com>, abhijit Menon-Sen <ams@2ndquadrant.com>, Peter Geoghegan <pg@bowt.ie>, Ashutosh Sharma <ashu.coek88@gmail.com>
Date: 2017-08-15T01:59:05Z
Lists: pgsql-hackers
On 15 August 2017 at 09:11, Moon Insung <Moon_Insung_i3@lab.ntt.co.jp> wrote: > Dear Craig Ringer > > > > Frist, thank you for implementing the necessary function. > > > > but, i have some question. > > > > question 1) vacuum freeze hint bits > > If run a vacuum freeze, bits in the infomask will be 0x0300. > > in this case, if output the value of informsk in the run to you modified, > > HEAP_XMIN_COMMITTED(0x0100), HEAP_XMIN_INVALID(0x0200), > HEAP_XMIN_FROZEN(0x0300) > > all outputs to hint bits. > > > > is it normal to output values? > > > > if look at htup_details.h code, > > > > #define HeapTupleHeaderXminInvalid(tup) \ > > ( \ > > ((tup)->t_infomask & (HEAP_XMIN_COMMITTED|HEAP_XMIN_INVALID)) > == \ > > HEAP_XMIN_INVALID \ > > ) > > #define HeapTupleHeaderSetXminCommitted(tup) \ > > ( \ > > AssertMacro(!HeapTupleHeaderXminInvalid(tup)), \ > > ((tup)->t_infomask |= HEAP_XMIN_COMMITTED) \ > > ) > > > > HEAP_XMIN_INVALID and HEAP_XMIN_COMMITTED can not be write simultaneously. > The bits are set, those macros just test to exclude the special meaning of both bits being set at once to mean "frozen". I was reluctant to filter out HEAP_XMIN_COMMITTED and HEAP_XMIN_INVALID when we detect that it's frozen, because that could well be misleading when debugging. If you think that is useful, then I suggest you add an option so that when it's outputting the interpreted mask not the raw mask, it suppresses output of HEAP_XMIN_COMMITTED and HEAP_XMIN_INVALID if HEAP_XMIN_FROZEN. question 2) xmax lock hint bits > > similar to the vacuum freezeze question.. > > Assume that the infomask has a bit of 0x0050 > > > > In this case, if run on the code that you modified, > > HEAP_XMAX_KEYSHR_LOCK(0x0010), HEAP_XMAX_EXCL_LOCK(0x0040), > HEAP_XMAX_IS_LOCKED_ONLY > > three hint bits are the output. > > > > if look at htup_details.h code, > > > > #define HEAP_XMAX_IS_SHR_LOCKED(infomask) \ > > (((infomask) & HEAP_LOCK_MASK) == HEAP_XMAX_SHR_LOCK) > > #define HEAP_XMAX_IS_EXCL_LOCKED(infomask) \ > > (((infomask) & HEAP_LOCK_MASK) == HEAP_XMAX_EXCL_LOCK) > > #define HEAP_XMAX_IS_KEYSHR_LOCKED(infomask) \ > > (((infomask) & HEAP_LOCK_MASK) == HEAP_XMAX_KEYSHR_LOCK) > > > > It is divided into to hint bits. > > so I think this part needs to fix. > It's the same issue as above, with the same answer IMO. If we're showing the raw mask bits we should show the raw mask bits only. But if we're showing combined bits and masks too, I guess we should filter out the raw bits when matched by some mask. I'm not entirely convinced by that, since I think hiding information could create more confusion than it fixes. I welcome others' views here. -- Craig Ringer http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
Commits
-
Redesign pageinspect function printing infomask bits
- 58b4cb30a5bf 13.0 landed
-
Add to pageinspect function to make t_infomask/t_infomask2 human-readable
- ddbd5d873161 13.0 landed
-
Improve documentation of pageinspect
- 1fb2d78cb946 10.11 landed
- 6472d7ad5d70 11.6 landed
- 08e68825c1d6 12.0 landed
- 292ae8af79b4 13.0 landed
-
Improve pageinspect module
- d6061f83a166 9.6.0 cited