does this look more like a possible bug or more like a possible hardware problem...? (long)

Поиск
Список
Период
Сортировка
Искать

does this look more like a possible bug or more like a possible hardware problem...? (long)

От:
Frank van Vugt <ftm.van.vugt@foxi.nl>
Дата:
Hi,

I'm using a 9500 line script to create an initial database. After applying a 
number of changes, I was repeatedly executing this script while hunting for 
typos. The script itself takes care of dropping the various objects and every 
now and then (when delta t << autovacuum t) a manual vacuum full was 
performed to clean the system tables.

At one point, I arrived at the following situation:

db=# select version();
                                version
------------------------------------------------------------------------
 PostgreSQL 7.4.1 on i586-pc-linux-gnu, compiled by GCC gcc (GCC) 3.2.3


Message in psql terminal:

psql:/home/data/megadump.sql:5169: NOTICE:  CREATE TABLE / PRIMARY KEY will 
create implicit index "remainder_type_pkey" for table "remainder_type"
psql:/home/data/megadump.sql:5169: NOTICE:  CREATE TABLE / UNIQUE will create 
implicit index "remainder_type_abbreviation_key" for table "remainder_type"
psql:/home/data/megadump.sql:5169: WARNING:  specified item offset is too 
large
psql:/home/data/megadump.sql:5169: PANIC:  failed to add item to the page for 
"pg_attribute_relid_attnum_index"
server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
psql:/home/data/megadump.sql:5169: connection to server was lost
vugtf@katrien:~>

(so psql did indeed quit)



The specific part in the script contains nothing strange:

CREATE TABLE "remainder_type" (
	"id" integer primary key check ("id" > 0),
	"abbreviation" varchar(20) not null unique,
	"descr" varchar(30) not null
);
GRANT SELECT on remainder_type to PUBLIC;
GRANT ALL on remainder_type to "postgres";



The server logs are mentioning this:

2004-03-09 23:11:34 [6516] LOG:  statement: CREATE TABLE "remainder_type" (
                "id" integer primary key check ("id" > 0),
                "abbreviation" varchar(20) not null unique,
                "descr" varchar(30) not null
        );
2004-03-09 23:11:34 [6516] NOTICE:  CREATE TABLE / PRIMARY KEY will create 
implicit index "remainder_type_pkey" for table "remainder_type"
2004-03-09 23:11:34 [6516] NOTICE:  CREATE TABLE / UNIQUE will create implicit 
index "remainder_type_abbreviation_key" for table "remainder_type"
2004-03-09 23:11:34 [6516] WARNING:  specified item offset is too large
2004-03-09 23:11:34 [6516] PANIC:  failed to add item to the page for 
"pg_attribute_relid_attnum_index"
STATEMENT:  CREATE TABLE "remainder_type" (
                "id" integer primary key check ("id" > 0),
                "abbreviation" varchar(20) not null unique,
                "descr" varchar(30) not null
        );
2004-03-09 23:11:34 [833] LOG:  server process (PID 6516) was terminated by 
signal 6
2004-03-09 23:11:34 [833] LOG:  terminating any other active server processes
2004-03-09 23:11:34 [8074] WARNING:  terminating connection because of crash 
of another server process
DETAIL:  The postmaster has commanded this server process to roll back the 
current transaction and exit, because another server process exited 
abnormally and possibly corrupted shared memory.
HINT:  In a moment you should be able to reconnect to the database and repeat 
your command.
2004-03-09 23:11:34 [833] LOG:  all server processes terminated; 
reinitializing
2004-03-09 23:11:34 [8075] LOG:  database system was interrupted at 2004-03-09 
23:11:31 CET
2004-03-09 23:11:35 [8075] LOG:  checkpoint record is at 1/9FAAB5C
2004-03-09 23:11:35 [8075] LOG:  redo record is at 1/9E803DC; undo record is 
at 0/0; shutdown FALSE
2004-03-09 23:11:35 [8075] LOG:  next transaction ID: 354187; next OID: 
8355508
2004-03-09 23:11:35 [8075] LOG:  database system was not properly shut down; 
automatic recovery in progress
2004-03-09 23:11:35 [8075] LOG:  redo starts at 1/9E803DC
2004-03-09 23:11:46 [8075] LOG:  record with zero length at 1/B27335C
2004-03-09 23:11:46 [8075] LOG:  redo done at 1/B273338
2004-03-09 23:11:55 [8075] LOG:  database system is ready


After this, a vacuum full verbose analyse seems to end prematurely with:

INFO:  vacuuming "public.stock_delivery"
INFO:  "stock_delivery": found 0 removable, 0 nonremovable row versions in 0 
pages
DETAIL:  0 dead row versions cannot be removed yet.
Nonremovable row versions range from 0 to 0 bytes long.
There were 0 unused item pointers.
Total free space (including removable row versions) is 0 bytes.
0 pages are or will become empty, including 0 at the end of the table.
0 pages containing 0 free bytes are potential move destinations.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
INFO:  index "stock_delivery_pkey" now contains 0 row versions in 1 pages
DETAIL:  0 index pages have been deleted, 0 are currently reusable.
CPU 0.00s/0.00u sec elapsed 0.02 sec.
INFO:  index "stock_delivery_delivery_id_key" now contains 0 row versions in 1 
pages
DETAIL:  0 index pages have been deleted, 0 are currently reusable.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
INFO:  index "stock_delivery_idx1" now contains 0 row versions in 1 pages
DETAIL:  0 index pages have been deleted, 0 are currently reusable.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
INFO:  analyzing "public.stock_delivery"
INFO:  "stock_delivery": 0 pages, 0 rows sampled, 0 estimated total rows
ERROR:  catalog is missing 6 attribute(s) for relid 8349771




Looking at the pg_autovacuum log (see timestamps) it seems this could have 
clashed with the script :

[2004-03-09 11:11:08 PM] Performing: VACUUM ANALYZE "pg_catalog"."pg_depend"
[2004-03-09 11:11:29 PM]   table name:     
megafox_trial."pg_catalog"."pg_depend"
[2004-03-09 11:11:29 PM]      relid: 16599;   relisshared: 0
[2004-03-09 11:11:29 PM]      reltuples: 6124;  relpages: 153
[2004-03-09 11:11:29 PM]      curr_analyze_count:  668446; cur_delete_count:   
332899
[2004-03-09 11:11:29 PM]      ins_at_last_analyze: 668446; del_at_last_vacuum: 
332899
[2004-03-09 11:11:29 PM]      insert_threshold:    6624; delete_threshold    
13248
[2004-03-09 11:11:29 PM] Performing: VACUUM ANALYZE 
"pg_catalog"."pg_attribute"
[2004-03-09 11:11:35 PM] Can not refresh statistics information from the 
database megafox_trial.
[2004-03-09 11:11:35 PM] The error is [server closed the connection 
unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
]
[2004-03-09 11:11:35 PM] Fatal error occured while sending query (select 
oid,reltuples,relpages from pg_class where oid=1249) to database 
megafox_trial
[2004-03-09 11:11:35 PM] The error is []
[2004-03-09 11:11:35 PM]   table name:     
megafox_trial."pg_catalog"."pg_attribute"
[2004-03-09 11:11:35 PM]      relid: 1249;   relisshared: 0
[2004-03-09 11:11:35 PM]      reltuples: 3595;  relpages: 214
[2004-03-09 11:11:35 PM]      curr_analyze_count:  721978; cur_delete_count:   
361920
[2004-03-09 11:11:35 PM]      ins_at_last_analyze: 707819; del_at_last_vacuum: 
346312
[2004-03-09 11:11:35 PM]      insert_threshold:    4095; delete_threshold    
11400
[2004-03-09 11:11:35 PM] Performing: VACUUM ANALYZE "pg_catalog"."pg_class"
[2004-03-09 11:11:35 PM] Fatal error occured while sending query (VACUUM 
ANALYZE "pg_catalog"."pg_class") to database megafox_trial
[2004-03-09 11:11:35 PM] The error is []
[2004-03-09 11:11:35 PM] Fatal error occured while sending query (select 
oid,reltuples,relpages from pg_class where oid=1259) to database 
megafox_trial
[2004-03-09 11:11:35 PM] The error is []
[2004-03-09 11:11:35 PM]   table name:     
megafox_trial."pg_catalog"."pg_class"
[2004-03-09 11:11:35 PM]      relid: 1259;   relisshared: 0
[2004-03-09 11:11:35 PM]      reltuples: 885;  relpages: 117
[2004-03-09 11:11:35 PM]      curr_analyze_count:  439206; cur_delete_count:   
373969
[2004-03-09 11:11:35 PM]      ins_at_last_analyze: 430423; del_at_last_vacuum: 
366316
[2004-03-09 11:11:35 PM]      insert_threshold:    1385; delete_threshold    
2770
[2004-03-09 11:11:35 PM] Performing: VACUUM ANALYZE "pg_catalog"."pg_attrdef"
[2004-03-09 11:11:35 PM] Fatal error occured while sending query (VACUUM 
ANALYZE "pg_catalog"."pg_attrdef") to database megafox_trial
[2004-03-09 11:11:35 PM] The error is []
[2004-03-09 11:11:35 PM] Fatal error occured while sending query (select 
oid,reltuples,relpages from pg_class where oid=16384) to database 
megafox_trial
[2004-03-09 11:11:35 PM] The error is []





There's nothing critical here and I expect a drop/create database to solve it, 
but I'll wait for a reply just in case.



-- 
Best,




Frank.

Re: does this look more like a possible bug or more like a possible hardware problem...? (long)

От:
Frank van Vugt <ftm.van.vugt@foxi.nl>
Дата:
Hi Tom,

> > At one point, I arrived at the following situation:
> > psql:/home/data/megadump.sql:5169: WARNING:  specified item offset is too
> > large
> > psql:/home/data/megadump.sql:5169: PANIC:  failed to add item to the page
> > for "pg_attribute_relid_attnum_index"
>
> Looks like a bug to me.  Can you create a reproducible test case?

Nope.....

Trying the same script on a newly created database doesn't show the problem. 
However, I do still have the database that came up with this message, which 
is now failing a vacuum full verbose analyse with:

(psql)
INFO:  vacuuming "public.user_pref"
INFO:  "user_pref": found 0 removable, 0 nonremovable row versions in 0 pages
DETAIL:  0 dead row versions cannot be removed yet.
Nonremovable row versions range from 0 to 0 bytes long.
There were 0 unused item pointers.
Total free space (including removable row versions) is 0 bytes.
0 pages are or will become empty, including 0 at the end of the table.
0 pages containing 0 free bytes are potential move destinations.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
INFO:  index "user_pref_pkey" now contains 0 row versions in 1 pages
DETAIL:  0 index pages have been deleted, 0 are currently reusable.
CPU 0.00s/0.00u sec elapsed 0.03 sec.
INFO:  index "user_pref_idx1" now contains 0 row versions in 1 pages
DETAIL:  0 index pages have been deleted, 0 are currently reusable.
CPU 0.00s/0.00u sec elapsed 0.01 sec.
INFO:  analyzing "public.user_pref"
INFO:  "user_pref": 0 pages, 0 rows sampled, 0 estimated total rows
ERROR:  catalog is missing 6 attribute(s) for relid 8349771

(log)
2004-03-10 10:10:00 [8207] LOG:  statement: vacuum full verbose analyse;
2004-03-10 10:11:43 [8207] ERROR:  catalog is missing 6 attribute(s) for relid 
8349771


The server itself has no particular messages in its log that hint on what went 
on, except for the earlier mentioned 'possible clash' of a running 
pg_autovacuum. By the way, I have stopped pg_autovacuum by now to avoid any 
more changes on this particular database.



-- 
Best,




Frank.

Re: does this look more like a possible bug or more like a possible hardware problem...? (long)

От:
Frank van Vugt <ftm.van.vugt@foxi.nl>
Дата:
Hi,

> > ERROR:  catalog is missing 6 attribute(s) for relid 8349771

> This is consistent with the idea that pg_attribute_relid_attnum_index is
> corrupted.  I would suggest saving a copy of that file for postmortem
> analysis and then trying to REINDEX pg_attribute.

Uhm...... looking for a file named 8349771 located in the directory base/ 
where nr corresponds to the proper db, using oid2name.....

We seem to have a small problem : there is no such file.....

I'll hold reindexing in case you first want to look elsewhere.

> If REINDEX makes the problem go away, would you send me the corrupted
> index file off-list?

I happily would, but you already know its content ;-)


Here's a log of what I did:

base/7847604# ls 82*
8240054  8240056  8240058  8240059  8240600  8240602  8261384  8261386  
8261388  8261398

base/7847604# ls 83*
8351687  8352194  8352623  8352754  8353080  8353478  8353581  8353741
 

The last few existing entries from the 82* range seem to be regular 
user-tables and corresponding indexes, likewise for the first few in the 83* 
range

But when I try the particular oid:

# /usr/local/pgsql/bin/oid2name -d megafox_trial -U ... -P ... -o 8349771
Tablename of oid 8349771 from database "megafox_trial":
---------------------------------
8349771 = article_property_tree

and its revers:

# /usr/local/pgsql/bin/oid2name -d megafox_trial -U ... -P ... 
	-t article_property_tree
Oid of table article_property_tree from database "megafox_trial":
---------------------------------
VERY scary:  more than one table with that name found!!




-- 
Best,




Frank.

Re: does this look more like a possible bug or more like a possible hardware problem...? (long)

От:
Frank van Vugt <ftm.van.vugt@foxi.nl>
Дата:
Some additional info:

# select * from pg_class where relname = 'article_property_tree';
-[ RECORD 1 ]--
+-------------------------------------------------------------------
relname        | article_property_tree
relnamespace   | 2200
reltype        | 8349772
relowner       | 1000
relam          | 0
relfilenode    | 8349771
relpages       | 4
reltuples      | 299
reltoastrelid  | 8349775
reltoastidxid  | 0
relhasindex    | t
relisshared    | f
relkind        | r
relnatts       | 6
relchecks      | 1
reltriggers    | 3
relukeys       | 0
relfkeys       | 0
relrefs        | 0
relhasoids     | t
relhaspkey     | t
relhasrules    | f
relhassubclass | f
relacl         | {vugtf=a*r*w*d*R*x*t*/vugtf,=arwdRxt/vugtf,postgres=arwdRxt/
vugtf}
-[ RECORD 2 ]--
+-------------------------------------------------------------------
relname        | article_property_tree
relnamespace   | 2200
reltype        | 8354495
relowner       | 1000
relam          | 0
relfilenode    | 8354494
relpages       | 4
reltuples      | 299
reltoastrelid  | 8354498
reltoastidxid  | 0
relhasindex    | t
relisshared    | f
relkind        | r
relnatts       | 6
relchecks      | 1
reltriggers    | 5
relukeys       | 0
relfkeys       | 0
relrefs        | 0
relhasoids     | t
relhaspkey     | t
relhasrules    | f
relhassubclass | f
relacl         | {vugtf=a*r*w*d*R*x*t*/vugtf,=arwdRxt/vugtf,postgres=arwdRxt/
vugtf}







-- 
Best,




Frank.

Re: does this look more like a possible bug or more like a possible hardware problem...? (long)

От:
Frank van Vugt <ftm.van.vugt@foxi.nl>
Дата:
> I'm sorry, I meant to say save a copy of
> pg_attribute_relid_attnum_index.  The correct filename for it can be
> found via
> select relfilenode from pg_class where relname =
> 'pg_attribute_relid_attnum_index';

Got it, made a backup of the entire database as well. Since the db wasn't 
filled yet, both files are fairly small when bzipped (<0.5MB and < 5MB) and 
both can be made available if you want.

Issuing 'reindex table pg_attribute' did not solve the problem, though....

> > Oid of table article_property_tree from database "megafox_trial":
> > ---------------------------------
> > VERY scary:  more than one table with that name found!!
>
> Do you have more than one such table (presumably in different schemas)?
> If so this isn't scary at all.  I don't believe oid2name has been fixed
> to be schema-aware :-(

Nope, all user-tables are in public at the moment.

Also:

megafox_trial=# select * from article_property_tree;
ERROR:  catalog is missing 6 attribute(s) for relid 8349771





-- 
Best,




Frank.

Re: does this look more like a possible bug or more like a possible hardware problem...? (long)

От:
Tom Lane <tgl@sss.pgh.pa.us>
Дата:
Frank van Vugt  writes:
> At one point, I arrived at the following situation:

> psql:/home/data/megadump.sql:5169: WARNING:  specified item offset is too 
> large
> psql:/home/data/megadump.sql:5169: PANIC:  failed to add item to the page for 
> "pg_attribute_relid_attnum_index"

Looks like a bug to me.  Can you create a reproducible test case?

			regards, tom lane

Re: does this look more like a possible bug or more like

От:
Jan Wieck <JanWieck@Yahoo.com>
Дата:
Tom Lane wrote:
> Frank van Vugt  writes:
>> At one point, I arrived at the following situation:
> 
>> psql:/home/data/megadump.sql:5169: WARNING:  specified item offset is too 
>> large
>> psql:/home/data/megadump.sql:5169: PANIC:  failed to add item to the page for 
>> "pg_attribute_relid_attnum_index"
> 
> Looks like a bug to me.  Can you create a reproducible test case?

I have seen one occurence of that during a Slony test run on the log 
table. I think it can be reproduced (not reliable though) with a high 
frequency of insert, select and delete of growing keys with a very high 
frequency of vacuums at the same time.

Concurrency seems to be an issue here.


Jan

-- 
#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#================================================== JanWieck@Yahoo.com #

Re: does this look more like a possible bug or more like a possible hardware problem...? (long)

От:
Tom Lane <tgl@sss.pgh.pa.us>
Дата:
Frank van Vugt  writes:
> At one point, I arrived at the following situation:
> psql:/home/data/megadump.sql:5169: WARNING:  specified item offset is too
> large
> psql:/home/data/megadump.sql:5169: PANIC:  failed to add item to the page
> for "pg_attribute_relid_attnum_index"

> Trying the same script on a newly created database doesn't show the problem. 
> However, I do still have the database that came up with this message, which 
> is now failing a vacuum full verbose analyse with:

> ERROR:  catalog is missing 6 attribute(s) for relid 8349771

This is consistent with the idea that pg_attribute_relid_attnum_index is
corrupted.  I would suggest saving a copy of that file for postmortem
analysis and then trying to REINDEX pg_attribute.  (Depending on which
PG version you are running, that may require running a standalone
backend.  See the REINDEX man page.)

If REINDEX makes the problem go away, would you send me the corrupted
index file off-list?

			regards, tom lane

Re: does this look more like a possible bug or more like a possible hardware problem...? (long)

От:
Tom Lane <tgl@sss.pgh.pa.us>
Дата:
Frank van Vugt  writes:
>> This is consistent with the idea that pg_attribute_relid_attnum_index is
>> corrupted.  I would suggest saving a copy of that file for postmortem
>> analysis and then trying to REINDEX pg_attribute.

> Uhm...... looking for a file named 8349771 located in the directory base/
> where nr corresponds to the proper db, using oid2name.....
> We seem to have a small problem : there is no such file.....

I'm sorry, I meant to say save a copy of
pg_attribute_relid_attnum_index.  The correct filename for it can be
found via
select relfilenode from pg_class where relname = 'pg_attribute_relid_attnum_index';

> Oid of table article_property_tree from database "megafox_trial":
> ---------------------------------
> VERY scary:  more than one table with that name found!!

Do you have more than one such table (presumably in different schemas)?
If so this isn't scary at all.  I don't believe oid2name has been fixed
to be schema-aware :-(

			regards, tom lane
FAQ