From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Per-Olov Esgard <Per-Olov(dot)Esgard(at)micronic-mydata(dot)com> |
Cc: | Merlin Moncure <mmoncure(at)gmail(dot)com>, pgsql-general(at)postgresql(dot)org |
Subject: | Re: Is there any problem with pg_notify and memory consumption? |
Date: | 2011-05-27 15:28:11 |
Message-ID: | 13476.1306510091@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Per-Olov Esgard <Per-Olov(dot)Esgard(at)micronic-mydata(dot)com> writes:
> This is my setup:
> - linux kernel 2.6.20.16 in a custom OS installation based on Fedora Core
> 3, yes I know, stone age :-)
> - memory 512 MB
> - swap 512 MB
> - cpu p4 2.8 GHz - single core - no hyper threading
> - db encoding UTF-8
> - client encoding default Latin-1 (Linux client) but UTF-8 used for
> Windows clients
> - postgresql.conf is attached as well as the environment variables
> - we build the postgres server ourselves and the dev env is the same as
> the target env (no cross compilation).
Hah, I replicated the problem. Here is what's going on: the main loop
in PostgresMain is intended to do its work in MessageContext. But if
ProcessCompletedNotifies does any work, it exits with
CurrentMemoryContext having been reset to TopMemoryContext during
transaction commit. This means any memory that the main loop doesn't
bother to explicitly free during the next command cycle will get leaked.
The reason we haven't noticed this seems to be that the only case where
any such memory does get leaked is if we have to do encoding conversion
on the incoming command. Also, the bug has only been there since 9.0.
I think the right fix is to make sure that ProcessCompletedNotifies
saves and restores the call-time CurrentMemoryContext.
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Andy Chambers | 2011-05-27 15:36:41 | Re: syntax for updating an aliased table |
Previous Message | Andrew Sullivan | 2011-05-27 10:54:47 | Re: Feature request: Replicate only parts of a database |