Re: Backend crash (long) - Mailing list pgsql-hackers
From | Robert Treat |
---|---|
Subject | Re: Backend crash (long) |
Date | |
Msg-id | 1032358103.4700.8.camel@camel Whole thread Raw |
In response to | Backend crash (long) ("Michael Paesold" <mpaesold@gmx.at>) |
List | pgsql-hackers |
I've definitely seen errors from including vacuum and/or analyze statements in functions, I think I've seen crashes too. If you check the docs I'm pretty sure they mention the specifics of not being able to use such statements. Robert Treat On Wed, 2002-09-18 at 04:09, Michael Paesold wrote: > Hi all, > > I have written a test function, that will create a sequence and a table, > than insert one million rows into the table, analyze the table and create an > index on one of the columns. > (so this will all happen inside on transaction) > > After doing that, the backend will crash. > (but the data will be inserted) > > If I comment out the table analyzing and the create index (I have not tested > which on leads to the crash), everything works fine. I have sent a copy of > the error log, the psql session, the function and some parts of my > postgresql.conf file. > > My system is RedHat 7.2, Kernel 2.4.9-34, glibc-2.2.4, gcc 2.96, PostgreSQL > 7.2.2 built from source. > > If you want, I could try other combinations of create/insert/analyze etc. to > test the exact steps needed to crash the backend. > > I know what I am doing is not really standard. This was rather a stability > test of postgres :). What do you think about this all? > > Best Regards, > Michael Paesold > > > --> logfile: > NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index > 'bench_big_pkey' for table 'bench_big' > DEBUG: recycled transaction log file 000000000000009F > [...skipping: recycled transaction log file 00000000000000A0 to > 00000000000000AE] > DEBUG: recycled transaction log file 00000000000000B0 > DEBUG: Analyzing bench_big > DEBUG: server process (pid 13840) was terminated by signal 11 > DEBUG: terminating any other active server processes > DEBUG: all server processes terminated; reinitializing shared memory and > semaphores > DEBUG: database system was interrupted at 2002-09-17 11:45:56 CEST > DEBUG: checkpoint record is at 0/B41170A4 > DEBUG: redo record is at 0/B400DF34; undo record is at 0/0; shutdown FALSE > DEBUG: next transaction id: 96959; next oid: 6282462 > DEBUG: database system was not properly shut down; automatic recovery in > progress > DEBUG: redo starts at 0/B400DF34 > DEBUG: ReadRecord: record with zero length at 0/B495F754 > DEBUG: redo done at 0/B495F730 > DEBUG: recycled transaction log file 00000000000000B2 > DEBUG: recycled transaction log file 00000000000000B1 > DEBUG: recycled transaction log file 00000000000000B3 > DEBUG: database system is ready > > The first time I tried the insert, there was an additional notice from > another backend, just after the line "DEBUG: terminating any other active > server processes": > NOTICE: Message from PostgreSQL backend: > The Postmaster has informed me that some other backend > died abnormally and possibly corrupted shared memory. > I have rolled back the current transaction and am > going to terminate your database system connection and exit. > Please reconnect to the database system and repeat your query. > > --> in psql: > billing=# select create_benchmark (); > NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index > 'bench_big_pkey' for table 'bench_big' > server closed the connection unexpectedly > This probably means the server terminated abnormally > before or while processing the request. > The connection to the server was lost. Attempting reset: Failed. > !# \c > Password: > You are now connected to database billing as user billing. > billing=# select real_time from bench_big where int_id in (1, 1000000); > real_time > ------------------------------- > 2002-09-17 11:32:22.63334+02 > 2002-09-17 11:46:16.601282+02 > (2 rows) > > --> all rows have definatly been inserted! > > > --> the trigger function: > > CREATE OR REPLACE FUNCTION create_benchmark () RETURNS BOOLEAN AS ' > DECLARE > char100 VARCHAR := > \'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZäöüÄÖÜß1234567890!"§$% > &/()=?+*#<>|-_,;.:^°{}´`[]\'; > r1 INTEGER; > r2 INTEGER; > r3 INTEGER; > BEGIN > CREATE SEQUENCE bench_seq; > > CREATE TABLE bench_big ( > int_id INTEGER NOT NULL default nextval(\'bench_seq\'), > bigint_id BIGINT NOT NULL, > sometext1 VARCHAR (50), > sometext2 VARCHAR (50), > sometext3 VARCHAR (50), > trx_time TIME WITHOUT TIME ZONE NOT NULL default CURRENT_TIME, > trx_timestamp TIMESTAMP WITHOUT TIME ZONE NOT NULL default > CURRENT_TIMESTAMP, > trx_date DATE NOT NULL default CURRENT_DATE, > real_time TIMESTAMP NOT NULL default timeofday(), > someboolean1 BOOLEAN NOT NULL, > someboolean2 BOOLEAN NOT NULL, > PRIMARY KEY (int_id) > ); > > FOR i IN 1..1000000 LOOP > r1 = CAST( RANDOM() * 49 AS INTEGER ); > r2 = CAST( RANDOM() * 49 AS INTEGER ); > r3 = CAST( RANDOM() * 49 AS INTEGER ); > > INSERT INTO bench_big > (bigint_id, sometext1, sometext2, sometext3, someboolean1, > someboolean2) > VALUES ( > CAST(RANDOM() * 10000000000 AS BIGINT), > SUBSTR(char100, 50, 49), -- this should be r1, r1 (but doesn't work!) > SUBSTR(char100, 50, 49), -- this should be r2, r2 (but doesn't work!) > SUBSTR(char100, 50, 49), -- this should be r3, r3 (but doesn't work!) > CASE WHEN r1 > 25 THEN TRUE ELSE FALSE END, > CASE WHEN r3 > 10 THEN TRUE ELSE FALSE END > ); > END LOOP; > > -- WARNING: un-commenting these lines could crash your postgres > -- CREATE INDEX bench_bigint_id_idx ON bench_big(bigint_id); > -- ANALYZE bench_big; > > RETURN TRUE; > END; > ' LANGUAGE 'plpgsql'; > > > --> Perhaps relevant parts of my postgresql.conf file: > > # Shared Memory Size > # > shared_buffers = 12288 # 2*max_connections, min 16 (one usually 8Kb) > max_fsm_relations = 100 # min 10, fsm is free space map (number of > tables) > max_fsm_pages = 20000 # min 1000, fsm is free space map (one about 8Kb) > max_locks_per_transaction = 64 # min 10 > wal_buffers = 8 # min 4 > > # Non-shared Memory Sizes > # > sort_mem = 4096 # min 32 (in Kb) > vacuum_mem = 16384 # min 1024 > > # Write-ahead log (WAL) > # > wal_files = 8 # range 0-64, default 0 > wal_sync_method = fdatasync # the default varies across platforms: > # # fsync, fdatasync, open_sync, or open_datasync > #wal_debug = 0 # range 0-16 > #commit_delay = 0 # range 0-100000 > #commit_siblings = 5 # range 1-1000 > #checkpoint_segments = 3 # in logfile segments (16MB each), min 1, default > 3 > #checkpoint_timeout = 300 # in seconds, range 30-3600 > #fsync = true > > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 3: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to majordomo@postgresql.org so that your > message can get through to the mailing list cleanly
pgsql-hackers by date: