On Mon, Mar 19, 2018 at 2:41 PM, Andres Freund <and...@anarazel.de> wrote:
> On 2018-03-19 14:37:24 -0500, Jeremy Finzel wrote: > > We upgraded to 9.5.5, and today we are running 9.5.11. And actually we > > upgraded from 9.3, not 9.4. We are still trying to figure out which > point > > release we were on at 9.3. > > Ok. IIRC there used to be a bug a few years back that sometimes lead to > highly contended pages being skipped during vacuum, and we'd still > update relfrozenxid. IIRC it required the table to be extended at the > same time or something? > > > > > > > - Can you install the pageinspect extension? If so, it might be a > > > CREATE EXTENSION pageinspect; > > > CREATE OR REPLACE FUNCTION check_rel(rel regclass, OUT blockno int8, > OUT > > > lp int2, OUT xmin xid) > > > RETURNS SETOF RECORD > > > LANGUAGE SQL > > > AS $$ > > > SELECT blockno, lp, t_xmin > > > FROM > > > generate_series(0, pg_relation_size($1::text) / 8192 - 1) > blockno, > > > -- every block in the relation > > > heap_page_items(get_raw_page($1::text, blockno::int4)) -- > every > > > item on the page > > > WHERE > > > t_xmin IS NOT NULL -- filter out empty items > > > AND t_xmin != 1 -- filter out bootstrap > > > AND t_xmin != 2 -- filter out frozen transaction id > > > AND (t_infomask & ((x'0100' | x'0200')::int)) != ((x'0100' | > > > x'0200')::int) -- filter out frozen rows with xid present > > > AND age(t_xmin) > age((SELECT relfrozenxid FROM pg_class WHERE > oid > > > = $1)) -- xid cutoff filter > > > $$; > > > SELECT * FROM check_rel('pg_authid') LIMIT 100; > > > > > > > Small note - Needs to be this because != is not supported for xid: > > > > AND NOT t_xmin = 1 -- filter out bootstrap > > AND NOT t_xmin = 2 -- filter out frozen transaction id > > Only on older releases ;). But yea, that looks right. > > > > > > and then display all items for one of the affected pages like > > > SELECT * FROM heap_page_items(get_raw_page('pg_authid', 34343)); > > > > > > > > > Alvaro: > > > - Hm, we talked about code adding context for these kind of errors, > > > right? Is that just skipped for csvlog? > > > - Alvaro, does the above check_rel() function make sense? > > > > > > Greetings, > > > > > > Andres Freund > > > > > > > The function does NOT show any issue with either of those tables. > > Uh, huh? Alvaro, do you see a bug in my query? > > Greetings, > > Andres Freund > FWIW, if I remove the last filter, I get these rows and I believe row 7/57/ 2906288382 is the one generating error: SELECT * FROM check_rel('pg_authid') LIMIT 100; blockno | lp | xmin ---------+----+------------ 7 | 4 | 2040863716 7 | 5 | 2040863716 7 | 8 | 2041172882 7 | 9 | 2041172882 7 | 12 | 2041201779 7 | 13 | 2041201779 7 | 16 | 2089742733 7 | 17 | 2090021318 7 | 18 | 2090021318 7 | 47 | 2090021898 7 | 48 | 2090021898 7 | 49 | 2102749003 7 | 50 | 2103210571 7 | 51 | 2103210571 7 | 54 | 2154640913 7 | 55 | 2163849781 7 | 56 | 2295315714 7 | 57 | 2906288382 7 | 58 | 2906329443 7 | 60 | 3131766386 8 | 1 | 2089844462 8 | 2 | 2089844462 8 | 3 | 2089844463 8 | 6 | 2089844463 8 | 9 | 2295318868 (25 rows)