From: | andervalbh(at)gmail(dot)com |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | BUG #6785: Memory Leak in plpgsql |
Date: | 2012-07-30 13:15:37 |
Message-ID: | E1Svpov-0005ND-Jf@wrigleys.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
The following bug has been logged on the website:
Bug reference: 6785
Logged by: Anderson Valadares
Email address: andervalbh(at)gmail(dot)com
PostgreSQL version: 9.1.4
Operating system: Linux CentOS 5.5
Description:
Hello,
we recently had a memory exhaustion in the PostgreSQL server of the
company, after a scan found a likely memory leak when using a plpgsql
function.
The problem occurred on an IBM x3400 server with 12G, CentOS 5.5 and
PostgreSQL 9.1.4. The leak occurs when a variable declared type of a table
column and when the
column or the table ceases to exist.
Follow the steps for the simulation:
create table tbl_test
(cod integer);
CREATE OR REPLACE FUNCTION citgis.fct_test()
RETURNS void AS
$body$
DECLARE
v_cod tbl_test.cod%type;
BEGIN
return;
END;
$body$
LANGUAGE 'plpgsql';
drop table tbl_test;
test=# select pg_backend_pid();
pg_backend_pid
----------------
6465
Initial memory
------------------------------------------------------------------------------------------------------------------------
PID USER PR NI VIRT SWAP RES CODE DATA SHR S P %CPU %MEM TIME+
COMMAND
6465 postgres 16 0 1183m 1.2g 4308 4684 2896 2900 S 1 0.0 0.0 0:00.00
postgres: postgres test [local] idle
------------------------------------------------------------------------------------------------------------------------
1st Execution
------------------------------------------------------------------------------------------------------------------------
\o processa.sql
\t
select E'select fct_test();'
from generate_series(1, 1000);
\o
\t
\i processa.sql
PID USER PR NI VIRT SWAP RES CODE DATA SHR S P %CPU %MEM TIME+
COMMAND
6465 postgres 15 0 1194m 1.2g 14m 4684 12m 3748 S 1 0.0 0.1 0:00.08
postgres: postgres test [local] idle
------------------------------------------------------------------------------------------------------------------------
2st Execution
------------------------------------------------------------------------------------------------------------------------
\o processa.sql
\t
select E'select fct_test();'
from generate_series(1, 1000);
\o
\t
\i processa.sql
PID USER PR NI VIRT SWAP RES CODE DATA SHR S P %CPU %MEM TIME+
COMMAND
6465 postgres 15 0 1203m 1.2g 23m 4684 21m 3748 S 1 0.0 0.2 0:00.17
postgres: postgres test [local] idle
------------------------------------------------------------------------------------------------------------------------
3st Execution
------------------------------------------------------------------------------------------------------------------------
\o processa.sql
\t
select E'select fct_test();'
from generate_series(1, 1000);
\o
\t
\i processa.sql
PID USER PR NI VIRT SWAP RES CODE DATA SHR S P %CPU %MEM TIME+
COMMAND
6465 postgres 15 0 1212m 1.2g 32m 4684 30m 3748 S 1 3.0 0.3 0:00.26
postgres: postgres test [local] idle
------------------------------------------------------------------------------------------------------------------------
4st Execution
------------------------------------------------------------------------------------------------------------------------
\o processa.sql
\t
select E'select fct_test();'
from generate_series(1, 1000);
\o
\t
\i processa.sql
PID USER PR NI VIRT SWAP RES CODE DATA SHR S P %CPU %MEM TIME+
COMMAND
6465 postgres 16 0 1221m 1.2g 41m 4684 39m 3756 S 1 0.0 0.3 0:00.36
postgres: postgres test [local] idle
------------------------------------------------------------------------------------------------------------------------
From | Date | Subject | |
---|---|---|---|
Next Message | Andres Freund | 2012-07-30 15:06:13 | Re: BUG #6785: Memory Leak in plpgsql |
Previous Message | Boris Folgmann | 2012-07-30 09:56:35 | Re: BUG #6774: FOR IN SELECT LOOP ignores ORDER BY |