On 05/16/2013 07:13 AM, Ioana Danes wrote:
Hi Jeff,

Yes stop/start of the application server does close all the connections to the database. Lately I did restart postgres too everytime that happened. It did happen in the past, last year sometime when I tried just to close the app and it was not enough. I might mix up different scenarios thought because I did have another issue when the by mistake the max connections were set to 1000 and run out of memory for good reason. So it might have been happened in that case not now.

I will keep you updated.

Thank you,
Ioana
------------------------------------------------------------------------
*From:* Jeff Janes <jeff.ja...@gmail.com>
*To:* Ioana Danes <ioanasoftw...@yahoo.ca>
*Cc:* PostgreSQL General <pgsql-general@postgresql.org>
*Sent:* Thursday, May 16, 2013 9:56:07 AM
*Subject:* Re: [GENERAL] Running out of memory at vacuum

On Thu, May 16, 2013 at 6:35 AM, Ioana Danes <ioanasoftw...@yahoo.ca <mailto:ioanasoftw...@yahoo.ca>> wrote:

    Hi Jeff,

    On Tuesday, May 14, 2013, Ioana Danes wrote:


        The fix is to restart postgres ... If I only close the
        connections the problem is still these so I need to restart
        postgres.


    How are you closing the connections?

    I restart the application server. The problem is that the max_idle
    connections was set to 1000 on jdbc connection so once the spike
    happened the app would run with 300 connections and 250 of them or
    so IDLE for most of the time. I am fixing that



Hi Ionana, thanks for the responses. Does restarting the app server successfully cause all of those connections to terminate? If so, and yet you still have memory problems, then there is still the mystery of where the memory is going.

Cheers,

Jeff




From http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server


   work_mem maintainance_work_mem
   
<http://www.postgresql.org/docs/current/static/runtime-config-resource.html#GUC-WORK-MEM>

If you do a lot of complex sorts, and have a lot of memory, then increasing the work_mem parameter allows PostgreSQL to do larger in-memory sorts which, unsurprisingly, will be faster than disk-based equivalents.

This size is applied to each and every sort done by each user, and complex queries can use multiple working memory sort buffers. Set it to 50MB, and have 30 users submitting queries, and you are soon using 1.5GB of real memory. Furthermore, if a query involves doing merge sorts of 8 tables, that requires 8 times work_mem. You need to consider what you set max_connections to in order to size this parameter correctly. This is a setting where data warehouse systems, where users are submitting very large queries, can readily make use of many gigabytes of memory.

maintenance_work_mem is used for operations like vacuum. Using extremely large values here doesn't help very much, and *because you essentially need to reserve that memory* for when vacuum kicks in, takes it away from more useful purposes. Something in the 256MB range has anecdotally been a reasonably large setting here.


Reply via email to