plperl doesn't release memory
От | Sven Willenberger |
---|---|
Тема | plperl doesn't release memory |
Дата | |
Msg-id | 1111617922.10573.46.camel@lanshark.dmv.com обсуждение исходный текст |
Ответы |
Re: plperl doesn't release memory
|
Список | pgsql-general |
I have been experiencing an issue with plperl and PostgreSQL 8.0.1 in that after calling a plperl function memory does not get released. Two different systems and each show different symptoms: 1) system: FreeBSD 5.3-Stable i386 with 1 GB RAM, dual Xeon P4 processors. script: plperl issues an SPI_EXEC_QUERY('select rows from table where condition'); this loads the result set into memory (to the tune of some 600MB based on top output). The function iterates through each row to grab some totals information and spits back a number. On the 2nd iteration of this function the connection is lost : Out of memory during request for 1012 bytes, total sbrk() is 291207168 bytes! Callback called exit. LOG: server process (PID 12672) exited with exit code 12 LOG: terminating any other active server processes LOG: received immediate shutdown request LOG: all server processes terminated; reinitializing LOG: database system was interrupted at 2005-03-23 17:17:23 EST LOG: checkpoint record is at 2/4D7F206C LOG: redo record is at 2/4D7F206C; undo record is at 0/0; shutdown TRUE LOG: next transaction ID: 4913594; next OID: 60798748 LOG: database system was not properly shut down; automatic recovery in progress 2) system: FreeBSD 5.3-Stable amd64 with 8GB RAM, dual opteron processors script: plperl issues an SPI_EXEC_QUERY('select rows from table where condition') which fetches roughly 18k tuples of rather small size. Each row is acted up and if criteria are met, a reference to the row is pushed onto an array (reference). after several iterations of this script (a dozen or so), a file is COPYed into the database consisting of some 38k rows and each row is acted upon by a trigger (plpgsql) -- this process normally takes just under a minute, but after running the plperl function a dozen or so times, the run time for the COPY exceeds 3 minutes. Restarting the PostgreSQL backend (restart) brings the COPY time back down to sub-minute range. Is it normal for plperl to *not* release any memory? Or perhaps plperl is not pfreeing or SPI_FINISHing cleanly? Sven Willenberger
В списке pgsql-general по дате отправления: