Re: dedicated server & postgresql 8.1 conf tunning - Mailing list pgsql-performance

From
Subject Re: dedicated server & postgresql 8.1 conf tunning
Date
Msg-id 6439bfe8d4afed3a360b906353c7e9e5@localhost
Whole thread Raw
In response to Re: dedicated server & postgresql 8.1 conf tunning  (Richard Huxton <dev@archonet.com>)
Responses Re: dedicated server & postgresql 8.1 conf tunning
Re: dedicated server & postgresql 8.1 conf tunning
List pgsql-performance
Thanks,

Unfornatly, i can't update pgsql to 8.3 since it's not in debian stable.

So i'm going to play with work_mem & shared_buffers.

With big shared_buffers pgsql tells me
shmget(cle=5432001, taille=11183431680, 03600).
so i do "echo 13183431680 > /proc/sys/kernel/shmmax" ( 10Go + 2Go just
in case)

but pgsql tells me again that it there's not enought shm..
How can i compute the go shmmax for my server ?

On Wed, 01 Oct 2008 12:36:48 +0100, Richard Huxton <dev@archonet.com>
wrote:
> paul@wayr.org wrote:
>> Hello
>>
>> I'm running pgsql 8.1.11 (from debian stable) on a server with 16GB RAM
>> (Linux helios 2.6.18-6-amd64 #1 SMP Tue Aug 19 04:30:56 UTC 2008 x86_64
>> GNU/Linux).
>
> Unless you're committed to this version, I'd seriously look into 8.3
> from backports (or compiled yourself). I'd expect some serious
> performance improvements for the workload you describe.
>
>> I have a table "tickets" with 1 000 000 insert by month ( ~2600 each
> 2hours
>> ) (for the moment 13000000 rows for 5GB )
>> and i have to extract statistics ( number of calls, number of calls less
>> than X seconds, number of news calles, number of calls from the new
>> callers, ...)
>
> OK, so not a lot of updates, but big aggregation queries. You might want
> to pre-summarise older data as the system gets larger.
>
>> 1°) The server will handle max 15 queries at a time.
>> So this is my postgresql.conf
>>
>> max_connections = 15
>
> Well, I'd allow 20 - just in case.
>
>> shared_buffers =  995600 # ~1Go
>> temp_buffers = 1000
>> work_mem = 512000 # ~512Ko
>
> I'd be tempted to increase work_mem by a lot, possibly even at the
> expense of shared_buffers. You're going to be summarising large amounts
> of data so the larger the better, particularly as your database is
> currently smaller than RAM. Start with 5MB then try 10MB, 20MB and see
> what difference it makes.
>
>> maintenance_work_mem = 1048576 # 1Mo
>>
>> max_fsm_pages = 41522880 # ~40Mo
>> max_fsm_relations = 8000
>
> See what a vacuum full verbose says for how much free space you need to
> track.
>
>> checkpoint_segments = 10
>> checkpoint_timeout = 3600
>
> With your low rate of updates shouldn't matter.
>
>> effective_cache_size = 13958643712 # 13Go
>
> Assuming that's based on what "top" or "free" say, that's fine. Don't
> forget it will need to be reduced if you increase work_mem or
> shared_buffers.
>
>> stats_start_collector = on
>> stats_command_string = on
>> stats_block_level = on
>> stats_row_level = on
>> autovacuum = off
>
> Make sure you're vacuuming if autovacuum is off.
>
>> How can i optimize the configuration?
>
> Looks reasonable, so far as you can tell from an email. Try playing with
> work_mem though.
>
>> 2°) My queries look like
>> SELECT tday AS n,
>> COUNT(DISTINCT(a.appelant)) AS new_callers,
>> COUNT(a.appelant) AS new_calls
>> FROM cirpacks.tickets AS a
>> WHERE LENGTH(a.appelant) > 4
>> AND a.service_id IN ( 95, 224, 35, 18 )
>> AND a.exploitant_id = 66
>> AND a.tyear = 2008
>> AND a.tmonth = 08
>
> Index on (tyear,tmonth) might pay off, or one on exploitant_id perhaps.
>
>> AND EXISTS ( SELECT 1 FROM cirpacks.clients AS b WHERE b.appelant =
>> a.appelant AND b.service_id IN ( 95, 224, 35, 18 ) AND b.heberge_id = 66
>> HAVING to_char(MIN(b.premier_appel), 'YYYYMMDD') = to_char(a.date,
>> 'YYYYMMDD') )
>
> It looks like you're comparing two dates by converting them to text.
> That's probably not the most efficient way of doing it. Might not be an
> issue here.
>
>> GROUP BY n
>> ORDER BY n;
>>
>> or select ... SUM( CASE WHEN condition THEN value ELSE 0) ... FROM
>> cirpacks.tickets WHERE tyear = ... and tmonth = ... and tday = ... AND
>> audiotel IN ( '...', '...' ....);
>> or select ... SUM( CASE WHEN condition THEN value ELSE 0) ... FROM
>> cirpacks.tickets WHERE '2007-01-01' <= date AND date <= '2008-08-31' AND
>> audiotel IN ( '...', '...' ....);
>>
>>
>> which indexes are the best ?
>
> The only way to find out is to test. You'll want to run EXPLAIN after
> adding each index to see what difference it makes. Then you'll want to
> see what impact this has on overall workload.
>
> Mostly though, I'd try out 8.3 and see if that buys you a free
> performance boost.
>
> --
>   Richard Huxton
>   Archonet Ltd
>
>


pgsql-performance by date:

Previous
From: Richard Huxton
Date:
Subject: Re: bizarre query performance question
Next
From: Richard Huxton
Date:
Subject: Re: dedicated server & postgresql 8.1 conf tunning