Thread: db server load

db server load

From
Stefano Nichele
Date:
Hi All,
I would like to ask to you, how many connections a db server can handle.
I know the question is not so easy, and actually I don't want to known a
"number" but something like:
- up to 100 connections: small load, low entry server is enough
- up to 200 connections: the db server starts to sweat, you need a
dedicated medium server
- up to 300 connections: hard work, dedicated server
- up to 500 connections: hard work, dedicated high level server

I would like just to understand when we can talk about small/medium/high
load.

At the moment I'm using a quad-proc system with a 6 disk 1+0 RAID array
and 2 separate disks for the OS and write-ahead logs.

Thanks
ste

Re: db server load

From
"Scott Marlowe"
Date:
On Fri, Dec 12, 2008 at 3:07 AM, Stefano Nichele
<stefano.nichele@gmail.com> wrote:
> Hi All,
> I would like to ask to you, how many connections a db server can handle. I
> know the question is not so easy, and actually I don't want to known a
> "number" but something like:
> - up to 100 connections: small load, low entry server is enough
> - up to 200 connections: the db server starts to sweat, you need a dedicated
> medium server
> - up to 300 connections: hard work, dedicated server
> - up to 500 connections: hard work, dedicated high level server
>
> I would like just to understand when we can talk about small/medium/high
> load.

Well, it's of course more than just how many connections you have.
What percentage of the connections are idle?  Are you running small
tight multi-statement transactions, or huge reporting queries?  The db
server we have at work routinely has 100+ connections, but of those,
there are only a dozen or so actively running, and they are small and
transactional in nature.  The machine handling this is very
overpowered, with 8 opteron cores and 12 disks in a RAID-10 for data
and 2 in another RAID-10 for everything else (pg_xlog, logging, etc)
under a very nice hardware RAID card with battery backed cache.  We've
tested it to much higher loads and it's held up quite well.

With the current load, and handling a hundred or so transactions per
second, the top of top looks like this:

top - 14:40:55 up 123 days,  2:24,  1 user,  load average: 1.08, 0.97, 1.04
Tasks: 284 total,   1 running, 283 sleeping,   0 stopped,   0 zombie
Cpu0  :  2.8%us,  0.4%sy,  0.0%ni, 96.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  2.5%us,  0.3%sy,  0.0%ni, 97.2%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  2.5%us,  0.2%sy,  0.0%ni, 97.1%id,  0.1%wa,  0.1%hi,  0.0%si,  0.0%st
Cpu3  : 10.0%us,  0.7%sy,  0.0%ni, 89.0%id,  0.1%wa,  0.0%hi,  0.2%si,  0.0%st
Cpu4  : 13.0%us,  0.9%sy,  0.0%ni, 85.9%id,  0.1%wa,  0.0%hi,  0.1%si,  0.0%st
Cpu5  : 13.5%us,  0.9%sy,  0.0%ni, 85.3%id,  0.1%wa,  0.0%hi,  0.1%si,  0.0%st
Cpu6  : 16.2%us,  1.1%sy,  0.0%ni, 82.2%id,  0.3%wa,  0.0%hi,  0.2%si,  0.0%st
Cpu7  : 34.3%us,  2.4%sy,  0.0%ni, 61.3%id,  0.1%wa,  0.4%hi,  1.5%si,  0.0%st

single line cpu looks like this:

Cpu(s):  6.1%us,  0.8%sy,  0.0%ni, 92.9%id,  0.0%wa,  0.0%hi,  0.1%si,  0.0%st

a line from vmstat 30 looks like this:

 1  0  12548 2636232 588964 27689652    0    0     0  3089 3096 4138
9  2 89  0  0

which shows us writing out at ~3M/sec.  This machine, running pgbench
on a db twice the size of the one it currently runs on, can get
throughput of 30 to 50 megabytes per second.  peaks at about 60,
random access.

> At the moment I'm using a quad-proc system with a 6 disk 1+0 RAID array and
> 2 separate disks for the OS and write-ahead logs.

Run some realistic load tests and monitor the machine with vmstat and
top and iostat, etc...  then compare those numbers to your day to day
numbers to get an idea how close to max performance you're running to
see how much headroom you have.

Re: db server load

From
Stefano Nichele
Date:
Hi Scott,
as you know since the other thread, I performed some tests:

-bash-3.1$ pgbench -c 50 -t 1000
starting vacuum...end.
transaction type: TPC-B (sort of)
scaling factor: 100
number of clients: 50
number of transactions per client: 1000
number of transactions actually processed: 50000/50000
tps = 377.351354 (including connections establishing)
tps = 377.788377 (excluding connections establishing)

Some vmstat samplings in the meantime:

procs -----------memory---------- ---swap-- -----io---- --system--
-----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy
id wa st
0  4     92 127880   8252 3294512    0    0   458 12399 2441 14903 22  9
34 35  0
11 49     92 125336   8288 3297016    0    0   392 11071 2390 11568 17
7 51 24  0
 0  2     92 124548   8304 3297764    0    0   126  8249 2291 3829  5  3
64 28  0
 0  1     92 127268   7796 3295672    0    0   493 11387 2323 14221 23
9 47 21  0
 0  2     92 127256   7848 3295492    0    0   501 10654 2215 14599 24
9 42 24  0
 0  2     92 125772   7892 3295656    0    0    34  7541 2311  327  0  1
59 40  0
 0  1     92 127188   7952 3294084    0    0   537 11039 2274 15460 23
10 43 24  0
 7  4     92 123816   7996 3298620    0    0   253  8946 2284 7310 11  5
52 32  0
 0  2     92 126652   8536 3294220    0    0   440  9563 2307 9036 13  6
56 25  0
 0 10     92 125268   8584 3296116    0    0   426 10696 2285 11034 20
9 39 32  0
 0  2     92 124168   8604 3297252    0    0   104  8385 2319 4162  3  3
40 54  0
 0  8     92 123780   8648 3296456    0    0   542 11498 2298 16613 25
10 16 48  0


-bash-3.1$ pgbench -t 10000 -c 50
starting vacuum...end.
transaction type: SELECT only
scaling factor: 100
number of clients: 50
number of transactions per client: 10000
number of transactions actually processed: 500000/500000
tps = 8571.573651 (including connections establishing)
tps = 8594.357138 (excluding connections establishing)


-bash-3.1$ pgbench -t 10000 -c 50 -S
starting vacuum...end.
transaction type: SELECT only
scaling factor: 100
number of clients: 50
number of transactions per client: 10000
number of transactions actually processed: 500000/500000
tps = 8571.573651 (including connections establishing)
tps = 8594.357138 (excluding connections establishing)


(next test is with scaling factor 1)

-bash-3.1$ pgbench -t 20000 -c 8 -S pgbench
starting vacuum...end.
transaction type: SELECT only
scaling factor: 1
number of clients: 8
number of transactions per client: 20000
number of transactions actually processed: 160000/160000
tps = 11695.895318 (including connections establishing)
tps = 11715.603720 (excluding connections establishing)

Any comment ?

I can give you also some details about database usage of my application:
- number of active connections: about 60
- number of idle connections: about 60

Here some number from a mine old pgfouine report:
- query peak: 378 queries/s
- select: 53,1%, insert 3,8%, update 2,2 %, delete 2,8 %

The application is basically a web application and the db size is 37 GB.

How would you classify the load ? small/medium/high ?

Cheers,
ste

Scott Marlowe wrote:
> On Fri, Dec 12, 2008 at 3:07 AM, Stefano Nichele
> <stefano.nichele@gmail.com> wrote:
>
>> Hi All,
>> I would like to ask to you, how many connections a db server can handle. I
>> know the question is not so easy, and actually I don't want to known a
>> "number" but something like:
>> - up to 100 connections: small load, low entry server is enough
>> - up to 200 connections: the db server starts to sweat, you need a dedicated
>> medium server
>> - up to 300 connections: hard work, dedicated server
>> - up to 500 connections: hard work, dedicated high level server
>>
>> I would like just to understand when we can talk about small/medium/high
>> load.
>>
>
> Well, it's of course more than just how many connections you have.
> What percentage of the connections are idle?  Are you running small
> tight multi-statement transactions, or huge reporting queries?  The db
> server we have at work routinely has 100+ connections, but of those,
> there are only a dozen or so actively running, and they are small and
> transactional in nature.  The machine handling this is very
> overpowered, with 8 opteron cores and 12 disks in a RAID-10 for data
> and 2 in another RAID-10 for everything else (pg_xlog, logging, etc)
> under a very nice hardware RAID card with battery backed cache.  We've
> tested it to much higher loads and it's held up quite well.
>
> With the current load, and handling a hundred or so transactions per
> second, the top of top looks like this:
>
> top - 14:40:55 up 123 days,  2:24,  1 user,  load average: 1.08, 0.97, 1.04
> Tasks: 284 total,   1 running, 283 sleeping,   0 stopped,   0 zombie
> Cpu0  :  2.8%us,  0.4%sy,  0.0%ni, 96.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
> Cpu1  :  2.5%us,  0.3%sy,  0.0%ni, 97.2%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
> Cpu2  :  2.5%us,  0.2%sy,  0.0%ni, 97.1%id,  0.1%wa,  0.1%hi,  0.0%si,  0.0%st
> Cpu3  : 10.0%us,  0.7%sy,  0.0%ni, 89.0%id,  0.1%wa,  0.0%hi,  0.2%si,  0.0%st
> Cpu4  : 13.0%us,  0.9%sy,  0.0%ni, 85.9%id,  0.1%wa,  0.0%hi,  0.1%si,  0.0%st
> Cpu5  : 13.5%us,  0.9%sy,  0.0%ni, 85.3%id,  0.1%wa,  0.0%hi,  0.1%si,  0.0%st
> Cpu6  : 16.2%us,  1.1%sy,  0.0%ni, 82.2%id,  0.3%wa,  0.0%hi,  0.2%si,  0.0%st
> Cpu7  : 34.3%us,  2.4%sy,  0.0%ni, 61.3%id,  0.1%wa,  0.4%hi,  1.5%si,  0.0%st
>
> single line cpu looks like this:
>
> Cpu(s):  6.1%us,  0.8%sy,  0.0%ni, 92.9%id,  0.0%wa,  0.0%hi,  0.1%si,  0.0%st
>
> a line from vmstat 30 looks like this:
>
>  1  0  12548 2636232 588964 27689652    0    0     0  3089 3096 4138
> 9  2 89  0  0
>
> which shows us writing out at ~3M/sec.  This machine, running pgbench
> on a db twice the size of the one it currently runs on, can get
> throughput of 30 to 50 megabytes per second.  peaks at about 60,
> random access.
>
>
>> At the moment I'm using a quad-proc system with a 6 disk 1+0 RAID array and
>> 2 separate disks for the OS and write-ahead logs.
>>
>
> Run some realistic load tests and monitor the machine with vmstat and
> top and iostat, etc...  then compare those numbers to your day to day
> numbers to get an idea how close to max performance you're running to
> see how much headroom you have.
>
>