From: | "scott(dot)marlowe" <scott(dot)marlowe(at)ihs(dot)com> |
---|---|
To: | "Jim C(dot) Nasby" <jim(at)nasby(dot)net> |
Cc: | Matthew Nuzum <cobalt(at)bearfruit(dot)org>, Pgsql-Performance <pgsql-performance(at)postgresql(dot)org> |
Subject: | Re: choosing the right platform |
Date: | 2003-04-10 16:42:35 |
Message-ID: | Pine.LNX.4.33.0304100858260.23398-100000@css120.ihs.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-performance |
On Wed, 9 Apr 2003, Jim C. Nasby wrote:
> On Wed, Apr 09, 2003 at 10:51:34AM -0600, scott.marlowe wrote:
> > Secondly, look carefully at using persistant connections in large numbers.
> >
> > While persistant connections DO represent a big savings in connect time,
> > the savings are lost in the noise of many PHP applications.
> >
> > i.e. my dual PIII swiss army knife server can initiate single persistant
> > connections at 1,000,000 a second (reusing the old ones of course).
> > non-persistant connects happen at 1,000 times a second. Most of my
> > scripts run in 1/10th of a second or so, so the 1/1000th used to connect
> > is noise to me.
>
> My $0.02 from my experience with Sybase and DB2:
> It's not the connection *time* that's an issue, it's the amount of
> resources (mostly memory) used by each database connection. Each db2
> connection to a database uses 4-8 meg of memory;
Agreed.
> on my pgsql system,
> each connection appears to be using about 4M. This is the resident set,
> which I believe indicates memory that basically can't be shared. All
> this memory is memory that can't be used for buffering/caching; on a
> system with a hundred connections, it can really start to add up.
If I run "select * from logs" from two different psql sessions on my
backup box hitting my main box (psql would hold the result set and throw
the results off if I ran it on the main box) I get this output from top:
No (pgsql) load:
8:58am up 9 days, 22:43, 4 users, load average: 0.65, 0.54, 0.35
169 processes: 168 sleeping, 1 running, 0 zombie, 0 stopped
CPU0 states: 0.1% user, 0.1% system, 0.0% nice, 99.1% idle
CPU1 states: 32.1% user, 3.2% system, 0.0% nice, 64.0% idle
Mem: 1543980K av, 1049864K used, 494116K free, 265928K shrd, 31404K buff
Swap: 2048208K av, 0K used, 2048208K free 568600K cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
10241 postgres 9 0 4216 4216 4136 S 0.0 0.2 0:05 postmaster
10242 postgres 9 0 4444 4444 4156 S 0.0 0.2 0:00 postmaster
10243 postgres 9 0 4812 4812 4148 S 0.0 0.3 0:00 postmaster
1 psql select *:
9:03am up 9 days, 22:48, 2 users, load average: 0.71, 0.71, 0.46
166 processes: 165 sleeping, 1 running, 0 zombie, 0 stopped
CPU0 states: 0.0% user, 0.0% system, 0.0% nice, 100.0% idle
CPU1 states: 0.1% user, 2.0% system, 0.0% nice, 97.3% idle
Mem: 1543980K av, 1052188K used, 491792K free, 265928K shrd, 32036K buff
Swap: 2048208K av, 0K used, 2048208K free 570656K cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
10241 postgres 10 0 4216 4216 4136 S 0.0 0.2 0:05 postmaster
10242 postgres 9 0 4448 4448 4156 S 0.0 0.2 0:00 postmaster
10243 postgres 9 0 4812 4812 4148 S 0.0 0.3 0:00 postmaster
18026 postgres 9 0 236M 236M 235M S 0.0 15.6 0:12 postmaster
18035 postgres 10 0 5832 5732 5096 S 0.0 0.3 0:00 postmaster
2 psql select *:
9:03am up 9 days, 22:49, 2 users, load average: 0.58, 0.66, 0.45
166 processes: 165 sleeping, 1 running, 0 zombie, 0 stopped
CPU0 states: 0.0% user, 2.2% system, 0.0% nice, 97.2% idle
CPU1 states: 0.0% user, 0.0% system, 0.0% nice, 100.0% idle
Mem: 1543980K av, 1053152K used, 490828K free, 265928K shrd, 32112K buff
Swap: 2048208K av, 0K used, 2048208K free 570684K cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
10241 postgres 8 0 4216 4216 4136 S 0.0 0.2 0:05 postmaster
10242 postgres 9 0 4448 4448 4156 S 0.0 0.2 0:00 postmaster
10243 postgres 9 0 4812 4812 4148 S 0.0 0.3 0:00 postmaster
18026 postgres 9 0 236M 236M 235M S 0.0 15.6 0:12 postmaster
18035 postgres 9 0 236M 236M 235M S 0.0 15.6 0:12 postmaster
The difference between SIZE and SHARE is the delta, which is only
something like 3 or 4 megs for the initial select * from logs, but the
second one is only 1 meg. On average, the actual increase in memory usage
for postgresql isn't that great, usually about 1 meg.
Running out of memory isn't really a problem with connections<=200 and 1
gig of ram, as long as sort_mem isn't too high. I/O contention is the
killer at that point, as is CPU load.
From | Date | Subject | |
---|---|---|---|
Next Message | scott.marlowe | 2003-04-10 16:51:38 | Re: choosing the right platform |
Previous Message | Tom Lane | 2003-04-10 14:40:15 | Re: Caching (was Re: choosing the right platform) |