Re: Repeated Query is much slower in PostgreSQL8.2.4 than DB2 9.1 - Mailing list pgsql-performance

From ning
Subject Re: Repeated Query is much slower in PostgreSQL8.2.4 than DB2 9.1
Date
Msg-id 27f31620907151753s1031ded0o4d5fb73a91789a42@mail.gmail.com
Whole thread Raw
In response to Re: Repeated Query is much slower in PostgreSQL8.2.4 than DB2 9.1  (Mike Ivanov <mikei@activestate.com>)
Responses Re: Repeated Query is much slower in PostgreSQL8.2.4 than DB2 9.1  (Mike Ivanov <mikei@activestate.com>)
List pgsql-performance
Hi Mike,

Thank you for your explanation.
The "explain analyze" command used is as follows, several integers are
bound to '?'.
-----
SELECT oid_,void,nameId,tag,intval,lowerbound,upperbound,crossfeeddir,feeddir,units,opqval,bigval,strval
FROM (SELECT attributeOf,void,nameId,tag,intval,lowerbound,upperbound,crossfeeddir,feeddir,units,opqval,bigval,strval
FROM DenormAttributePerf WHERE attributeof IN (SELECT oid_ FROM
JobView WHERE JobView.JobId=? and JobView.assignedTo_=?) AND nameId in
(?)) x RIGHT OUTER JOIN (SELECT oid_ FROM JobView WHERE
JobView.JobId=? and JobView.assignedTo_=?) y ON attributeof = oid_ FOR
READ ONLY
-----

The result of the command is
-----

     QUERY PLAN

-------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Nested Loop Left Join  (cost=575.60..1273.15 rows=81 width=568)
(actual time=0.018..0.018 rows=0 loops=1)
   Join Filter: (x.attributeof = j1.oid_)
   ->  Index Scan using job_tc1 on job j1  (cost=0.00..8.27 rows=1
width=4) (actual time=0.016..0.016 rows=0 loops=1)
         Index Cond: ((assignedto_ = 888) AND (jobid = 0))
   ->  Merge Left Join  (cost=575.60..899.41 rows=16243 width=564)
(never executed)
         Merge Cond: (v.void = b.void)
         ->  Merge Left Join  (cost=470.77..504.87 rows=2152
width=556) (never executed)
               Merge Cond: (v.void = res.void)
               ->  Sort  (cost=373.61..374.39 rows=310 width=544)
(never executed)
                     Sort Key: v.void
                     ->  Hash Left Join  (cost=112.07..360.78 rows=310
width=544) (never executed)
                           Hash Cond: (v.void = i.void)
                           ->  Hash Left Join  (cost=65.40..303.17
rows=38 width=540) (never executed)
                                 Hash Cond: (v.void = r.void)
                                 ->  Hash Left Join
(cost=21.42..257.86 rows=5 width=532) (never executed)
                                       Hash Cond: (v.void = s.void)
                                       ->  Nested Loop Left Join
(cost=8.27..244.65 rows=5 width=16) (never executed)
                                             Join Filter: (v.containedin = a.id)
                                             ->  Nested Loop
(cost=8.27..16.57 rows=1 width=12) (never executed)
                                                   ->  HashAggregate
(cost=8.27..8.28 rows=1 width=4) (never executed)
                                                         ->  Index
Scan using job_tc1 on job j1  (cost=0.00..8.27 rows=1 width=4) (never
executed)
                                                               Index
Cond: ((assignedto_ = 888) AND (jobid = 0))
                                                   ->  Index Scan
using attribute_tc1 on attribute a  (cost=0.00..8.27 rows=1 width=12)
(never executed)
                                                         Index Cond:
((a.attributeof = j1.oid_) AND (a.nameid = 6))
                                             ->  Append
(cost=0.00..137.60 rows=7239 width=12) (never executed)
                                                   ->  Index Scan
using attribute_value_i on attribute_value v  (cost=0.00..5.30 rows=9
width=12) (never executed)
                                                         Index Cond:
(v.containedin = a.id)
                                                   ->  Seq Scan on
string_value v  (cost=0.00..11.40 rows=140 width=12) (never executed)
                                                   ->  Seq Scan on
integer_value v  (cost=0.00..26.30 rows=1630 width=12) (never
executed)
                                                   ->  Seq Scan on
bigint_value v  (cost=0.00..25.10 rows=1510 width=12) (never executed)
                                                   ->  Seq Scan on
rangeofint_value v  (cost=0.00..25.10 rows=1510 width=12) (never
executed)
                                                   ->  Seq Scan on
resolution_value v  (cost=0.00..24.00 rows=1400 width=12) (never
executed)
                                                   ->  Seq Scan on
opaque_value v  (cost=0.00..20.40 rows=1040 width=12) (never executed)
                                       ->  Hash  (cost=11.40..11.40
rows=140 width=520) (never executed)
                                             ->  Seq Scan on
string_value s  (cost=0.00..11.40 rows=140 width=520) (never executed)
                                 ->  Hash  (cost=25.10..25.10
rows=1510 width=12) (never executed)
                                       ->  Seq Scan on
rangeofint_value r  (cost=0.00..25.10 rows=1510 width=12) (never
executed)
                           ->  Hash  (cost=26.30..26.30 rows=1630
width=8) (never executed)
                                 ->  Seq Scan on integer_value i
(cost=0.00..26.30 rows=1630 width=8) (never executed)
               ->  Sort  (cost=97.16..100.66 rows=1400 width=16)
(never executed)
                     Sort Key: res.void
                     ->  Seq Scan on resolution_value res
(cost=0.00..24.00 rows=1400 width=16) (never executed)
         ->  Sort  (cost=104.83..108.61 rows=1510 width=12) (never executed)
               Sort Key: b.void
               ->  Seq Scan on bigint_value b  (cost=0.00..25.10
rows=1510 width=12) (never executed)
 Total runtime: 0.479 ms
(46 rows)
-----

Best regards,
Ning

On Thu, Jul 16, 2009 at 7:37 AM, Mike Ivanov<mikei@activestate.com> wrote:
> ning wrote:
>>
>> The log is really long,
>
> Which usually signals a problem with the query.
>
>> but I compared the result of "explain analyze"
>> for first and later executions, except for 3 "time=XXX" numbers, they
>> are identical.
>>
>
> They are supposed to be identical unless something is really badly broken.
>
>> I agree with you that PostgreSQL is doing different level of caching,
>> I just wonder if there is any way to speed up PostgreSQL in this
>> scenario,
>
> This is what EXPLAIN ANALYZE for. Could you post the results please?
>
> Cheers,
> Mike
>
>

pgsql-performance by date:

Previous
From: Scott Carey
Date:
Subject: Re: Very big insert/join performance problem (bacula)
Next
From: ning
Date:
Subject: Re: Repeated Query is much slower in PostgreSQL8.2.4 than DB2 9.1