[postgis-users] postgis tuning parameters

Kevin Neufeld kneufeld at refractions.net
Thu Sep 27 16:40:30 PDT 2007


Hi Dylan,

As a developer on a stand-alone postgresql box, I have the following 
suggestions:

shared_buffers - This memory, of course as the name implies, is the 
amount of memory shared between concurrent database connections.  
Typically this should be about 50-75% of available RAM you have 
dedicated to postgresql on your box. So, a little math is involved... 
take your total memory, subtract that needed by the OS, subtract 
anything else needed by other applications, and use 75% of the 
remainder.  This parameter is set on startup.  I've seen web-server 
boxes with 16GB of RAM configured such that shared_buffers consume about 
12GB.  The idea here is simple: disks are slow, memory is fast. The more 
data that will slowly float up into RAM the better.

work-mem - This memory is the amount of RAM used by PostgreSQL when 
performing sort or hash join operations before being forced to disk.  
This memory is a per-connection allocation, hence, it is tightly coupled 
with max_connections (the number of concurrent connections on your 
database).  The default value is 1MB.  In my opinion, this is far, far 
too low to do anything useful in a database ... in a timely manner.  For 
a web-service database with hundreds of concurrent connections, each 
using 1MB of ram, I suppose this makes sense.  But for me, a developer 
on a small team hitting a development box with 4GB of ram, I have this 
set to about 150MB or 200MB.  But since this variable can be set at run 
time, before I run a complex one-time query (and no one else is using 
the box) I often set this to about 1.4GB using "SET work_mem TO 
1400000;" before running my query.

maintenance_work_mem - This memory is the amount of RAM used by 
PostgreSQL when performing maintenance operations like VACUUM, ANALYZE, 
CREATE INDEX, etc... before being forced to disk.  The default value of 
32MB is again far too low.  I often have this set to about 250MB on a 
4GB box with 3 or 4 developers since it is unlikely that every developer 
will be creating an index all at the same time.  Since this variable can 
also be set at run time, if the box is relatively idle from other 
developers, I often can create a large index quickly by issuing the 
command "SET maintenance_work_mem to 1400000;".

You will have to strike some sort of balance.  shared_buffers makes 
sense with many concurrent connections, but not so much on a single 
developer box.  I would say, for you, set shared_buffers to about 50% of 
availble postgres RAM and juggle the rest between work_mem and 
maintenance_work_mem. Remember you can always set the last two on the fly!

Also, the others are right, you will have to play with your SHMMAX and 
SHMMIN settings to achieve these recommended settings.

Hope this helps,
Kevin

-------------
Kevin Neufeld
Software Developer
Refractions Research Inc.
300-1207 Douglas St.
Victoria, B.C., V8W 2E7

Phone: (250) 383-3022
Email: kneufeld at refractions.net



Dylan Beaudette wrote:
> Hi,
>
> I have looked over a couple documents on tuning a postgis server:
>
> 1. 
> http://postgis.refractions.net/pipermail/postgis-users/2006-March/011539.html 
>
> 2. http://www.powerpostgresql.com/Downloads/annotated_conf_80.html
>
> When performing complex queries, with thousands of records and 
> geometries I am noticing that the postmaster process never exceeds 1% 
> of my system's memory (2Gb). I have tried setting the shared_buffers 
> parameter to values > 2000 ... but this only leads to an error when 
> the postgres server is restarted: cannot allocate this much mem, check 
> the SHMMAX kernel parameter.
>
> Perhaps some answers on are this page:
> http://www.redhat.com/docs/manuals/database/RHDB-2.1-Manual/admin_user/kernel-resources.html 
>
>
> or in the minds of people on the list. The machine in question is 
> mostly used for such queries and I would like postgis to be able to 
> better utilize the resources available.
>
> Cheers,
>
> Dylan
>
> -- 
> Dylan Beaudette
> Soils and Biogeochemistry Graduate Group
> University of California at Davis
> 530.754.7341
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users



More information about the postgis-users mailing list