Re: BRIN indexes - TRAP: BadArgument

Erik Rijkers <er@xs4all.nl>

From: "Erik Rijkers" <er@xs4all.nl>
To: "Alvaro Herrera" <alvherre@2ndquadrant.com>
Cc: "Heikki Linnakangas" <hlinnakangas@vmware.com>, "Simon Riggs" <simon@2ndquadrant.com>, "Robert Haas" <robertmhaas@gmail.com>, "Nicolas Barbier" <nicolas.barbier@gmail.com>, "Claudio Freire" <klaussfreire@gmail.com>, "Josh Berkus" <josh@agliodbs.com>, "Andres Freund" <andres@2ndquadrant.com>, "Pg Hackers" <pgsql-hackers@postgresql.org>
Date: 2014-09-08T18:03:49Z
Lists: pgsql-hackers
On Mon, September 8, 2014 18:02, Alvaro Herrera wrote:
> Here's version 18.  I have renamed it: These are now BRIN indexes.
>

I get into a BadArgument after:


$ cat crash.sql

-- drop table if exists t_100_000_000 cascade;
   create table         t_100_000_000 as select cast(i as integer) from generate_series(1, 100000000) as f(i) ;

-- drop index if exists t_100_000_000_i_brin_idx;
   create index         t_100_000_000_i_brin_idx on t_100_000_000 using brin(i); select
pg_size_pretty(pg_relation_size('t_100_000_000_i_brin_idx'));

select i from t_100_000_000 where i between 10000 and 1009999; -- ( + 999999 )


Log file says:

TRAP: BadArgument("!(((context) != ((void *)0) && (((((const Node*)((context)))->type) == T_AllocSetContext))))", File:
"mcxt.c", Line: 752)
2014-09-08 19:54:46.071 CEST 30151 LOG:  server process (PID 30336) was terminated by signal 6: Aborted
2014-09-08 19:54:46.071 CEST 30151 DETAIL:  Failed process was running: select i from t_100_000_000 where i between 10000
and 1009999;



The crash is caused by the last select statement; the table and index create are OK.

it only happens with a largish table; small tables are OK.



Linux / Centos / 32 GB.

 PostgreSQL 9.5devel_minmax_20140908_1809_0640c1bfc091 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.9.1, 64-bit

         setting          |              current_setting
--------------------------+--------------------------------------------
 autovacuum               | off
 port                     | 6444
 shared_buffers           | 100MB
 effective_cache_size     | 4GB
 work_mem                 | 10MB
 maintenance_work_mem     | 1GB
 checkpoint_segments      | 20
 data_checksums           | on
 server_version           | 9.5devel_minmax_20140908_1809_0640c1bfc091
 pg_postmaster_start_time | 2014-09-08 19:53 (uptime: 0d 0h 6m 54s)

'--prefix=/var/data1/pg_stuff/pg_installations/pgsql.minmax' '--with-pgport=6444'
'--bindir=/var/data1/pg_stuff/pg_installations/pgsql.minmax/bin'
'--libdir=/var/data1/pg_stuff/pg_installations/pgsql.minmax/lib' '--enable-depend' '--enable-cassert' '--enable-debug'
'--with-perl' '--with-openssl' '--with-libxml' '--with-extra-version=_minmax_20140908_1809_0640c1bfc091'


pgpatches/0095/minmax/20140908/minmax-18.patch


thanks,


Erik Rijkers




Commits

  1. Refactor per-page logic common to all redo routines to a new function.

  2. Reduce use of heavyweight locking inside hash AM.

  3. Scan the buffer pool just once, not once per fork, during relation drop.

  4. Major patch from Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>