Postgresql performance on Solaris - Mailing list pgsql-performance

From Scott Buchan
Subject Postgresql performance on Solaris
Date
Msg-id 71F044551C53974EB0735B3737EFE2FC088645@wwwserver
Whole thread Raw
Responses Re: Postgresql performance on Solaris
List pgsql-performance

Hi,

 

I am getting poor performance from my postgresql (version 7.3.2 compiled with gcc 2.95.2) database when running load tests on my web application.  The database works great until I get above 200 concurrent users.  The following query runtime will vary from:

 

explain analyze select TIMESTAMP, SPM_CONVSRCADDR,

SPM_CONVDSTADDR, SPM_CONVSRCPORT, SPM_CONVDSTPORT,

SPM_CONVPROTO, ACTION from FirewallLogs where TimeStamp>=1044939600000

and TimeStamp<=1047391020000 and spm_subid='462' and fqdn ='bs2@pcp' order by

timestamp desc;

                                                                    QUERY PLAN                              

---------------------------------------------------------------------------------------------------------------------------------------------------

 Sort  (cost=3525.27..3527.49 rows=888 width=47) (actual time=55.65..56.16 rows=913 loops=1)

   Sort Key: "timestamp"

   ->  Index Scan using firewalllogsindex on firewalllogs  (cost=0.00..3481.77 rows=888 width=47) (actual time=0.40..50.33 rows=913 loops=1)

         Index Cond: ((fqdn = 'bs2@pcp'::character varying) AND ("timestamp" >= 1044939600000::bigint) AND ("timestamp" <= 1047391020000::bigint))

         Filter: (spm_subid = 462)

 Total runtime: 57.36 msec

(6 rows)

 

to

 

                                                                    QUERY PLAN                              

---------------------------------------------------------------------------------------------------------------------------------------------------

 Sort  (cost=3525.27..3527.49 rows=888 width=47) (actual time=2323.79..2324.31 rows=913 loops=1)

   Sort Key: "timestamp"

   ->  Index Scan using firewalllogsindex on firewalllogs  (cost=0.00..3481.77 rows=888 width=47) (actual time=0.26..2318.11 rows=913 loops=1)

         Index Cond: ((fqdn = 'bs2@pcp'::character varying) AND ("timestamp" >= 1044939600000::bigint) AND ("timestamp" <= 1047391020000::bigint))

         Filter: (spm_subid = 462)

 Total runtime: 2325.62 msec

(6 rows)

 

NOTE:  I am only performing select queries - no inserts, deletes or updates. 

I am running postgresql on a SunFire v880 with 4 750MHz sparcv9 processors with 8 Gig of RAM running solaris 8.  I have 2 tables with 500,000 records in each and both tables are indexed.  I am connecting to the database through JDBC using a pool of connections (tried pools of 50, 100, and 200 with similar results).  When running the load tests, the cpu of the box is always above 60% idle.  I have run iostat and I am not seeing any problems with io.

 

I have tried different size shared_buffers from 4100 to 64000, and I have added the following to the /etc/system file:

 

set shmsys:shminfo_shmmax=0xffffffff

set shmsys:shminfo_shmmin=1

set shmsys:shminfo_shmmni=256

set shmsys:shminfo_shmseg=256

set semsys:seminfo_semmap=256

set semsys:seminfo_semmni=512

set semsys:seminfo_semmns=512

set semsys:seminfo_semmsl=32

 

I understand that this could be a problem with the kernel and not postgresql but I am at a loss at what to change to get better performance out of the database or the kernel.

 

Any help would be appreciated.

 

 

pgsql-performance by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: ext3 filesystem / linux 7.3
Next
From: Tom Lane
Date:
Subject: Re: Postgresql performance on Solaris