Search Postgresql Archives

Re: Postgres scalability and performance on windows

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 23 Nov 2006 22:31:40 -0000
"Gopal" <gopal@xxxxxxxxxxxxxx> wrote:

> Hi all,
> 
>  
> 
> I have a postgres installation thats running under 70-80% CPU usage
> while
> 
> an MSSQL7 installation did 'roughly' the same thing with 1-2% CPU load.
> 
>  
> 
> Here's the scenario,
> 
> 300 queries/second
> 
> Server: Postgres 8.1.4 on win2k server
> 
> CPU: Dual Xeon 3.6 Ghz, 
> 
> Memory: 4GB RAM
> 
> Disks: 3 x 36gb , 15K RPM SCSI
> 
> C# based web application calling postgres functions using npgsql 0.7.
> 
> Its almost completely read-only db apart from fortnightly updates.
> 
>  
> 
> Table 1 - About 300,000 rows with simple rectangles
> 
> Table 2 - 1 million rows 
> 
> Total size: 300MB
> 
>  
> 
> Functions : Simple coordinate reprojection and intersection query +
> inner join of table1 and table2.
> 
> I think I have all the right indexes defined and indeed the performance
> for  queries under low loads is fast.
> 
>  
> 
>  
> 
> ========================================================================
> ==========
> 
> postgresql.conf has following settings
> 
> max_connections = 150
> 
> hared_buffers = 20000                            # min 16 or
> max_connections*2, 8KB each

Considering you have 4G or RAM, you might want to allocate more than 160M to
shared buffers.

> temp_buffers = 2000                               # min 100, 8KB each
> 
> max_prepared_transactions = 25             # can be 0 or more
> 
> # note: increasing max_prepared_transactions costs ~600 bytes of shared
> memory
> 
> # per transaction slot, plus lock space (see max_locks_per_transaction).
> 
> work_mem = 512                                   # min 64, size in KB

Again, with 4G of RAM, you may get some beneifit from more than 1/2M of
work space.

> SQL server caches all the data in memory which is making it faster(uses
> about 1.2GB memory- which is fine).
> 
> But postgres has everything spread across 10-15 processes, with each
> process using about 10-30MB, not nearly enough to cache all the data and
> ends up doing a lot of disk reads.

Allocate more shared buffers and PG will use it.

> I've read that postgres depends on OS to cache the files, I wonder if
> this is not happenning on windows.

Yes, but it can access data even faster if it's in the shared buffer
space.  There are numerous write-ups on the Internet about this sort
of tuning.

> In any case I cannot believe that having 15-20 processes running on
> windows helps. Why not spwan of threads instead of processes, which
> might
> 
> be far less expensive and more efficient. Is there any way of doing
> this?

Because every other OS (Linux, BSD, Solaris, etc) does very well with
multiple spawned processes.  I expect that future versions of PG will
have some improvements to allow better performance on Windows, but you'll
be surprised how well it runs under a POSIX OS.

> My question is, should I just accept the performance I am getting as the
> limit on windows or should I be looking at some other params that I
> might have missed?

I have a feeling that some tuning would improve things for you.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux