> On Mon, Mar 30, 2009 at 4:02 PM, <[email protected]> wrote:
>>> On Mon, Mar 30, 2009 at 1:42 PM, <[email protected]> wrote:
>>>>> On Mon, Mar 30, 2009 at 12:42 PM, <[email protected]> wrote:
>>>>>> Arguably in this case the actual query should run faster than the
>>>>>> EXPLAIN
>>>>>> ANALYZE version, since the cache is hot. (Though that'd only likely
>>>>>> shave
>>>>>> a few dozen ms off the runtime)
>>>>>
>>>>> Joining a lot of tables together? Could be GEQO kicking in.
>>>>
>>>> Only if I get different query plans for the query depending on whether
>>>> it's being EXPLAIN ANALYZEd or not. That seems unlikely...
>>>
>>> Yes, you can. In fact you often will. Not because it's being
>>> explained or not, just because that's how GEQO works.
>>
>> Ouch. I did *not* know that was possible -- I assumed that the plan was
>> deterministic and independent of explain analyze. The query has seven
>> tables (one of them a temp table) and my geqo_threshold is set to 12. If
>> I'm reading the docs right GEQO shouldn't kick in.
>
> Any chance we could see the actual query? Right now I think we are
> shooting in the dark.
The query is:
select distinct
temp_symbol.entityid,
temp_symbol.libname,
temp_symbol.objid,
temp_symbol.objname,
temp_symbol.fromsymid,
temp_symbol.fromsymtype,
temp_symbol.objinstance,
NULL,
temp_symbol.csid,
libinstance.entityid,
NULL,
libobject.objid,
NULL,
provide_symbol.symbolid,
provide_symbol.symboltype,
libobject.objinstance,
libobject.libinstanceid,
objectinstance.csid,
NULL,
provide_symbol.is_weak,
NULL,
provide_symbol.is_local,
NULL,
provide_symbol.is_template,
NULL,
provide_symbol.is_common
from libinstance,
library,
libobject,
provide_symbol,
temp_symbol,
objectinstance,
attributes
where libinstance.libdate <= 1238445044
and libinstance.enddate > 1238445044
and libinstance.libinstanceid = libobject.libinstanceid
and libinstance.architecture = ?
and attributes.entityid = libinstance.entityid
and attributes.branchid = libinstance.branchid
and attributes.architecture = libinstance.architecture
and library.libid = libinstance.libid
and not secondary
and attribute in ('notoffline', 'notoffline')
and (provide_symbol.symboltype = 'T')
and libobject.objinstance = provide_symbol.objinstance
and libinstance.branchid = ?
and provide_symbol.symbolid = temp_symbol.symbolid
and objectinstance.objinstance = libobject.objinstance
and libinstance.istemp = 0
The explain analyze for the query's attached in a (possibly hopeless)
attempt to keep it from being word-wrapped into unreadability.
-Dan
Unique (cost=25323267.82..25350114.59 rows=397730 width=192) (actual
time=277.963..278.054 rows=35 loops=1)
-> Sort (cost=25323267.82..25324262.14 rows=397730 width=192) (actual
time=277.960..277.967 rows=35 loops=1)
Sort Key: temp_symbol.entityid, temp_symbol.libname, temp_symbol.objid,
temp_symbol.objname, temp_symbol.fromsymid, temp_symbol.fromsymtype,
temp_symbol.objinstance, temp_symbol.csid, libinstance.ent
ityid, libobject.objid, provide_symbol.symbolid, libobject.objinstance,
libobject.libinstanceid, objectinstance.csid, provide_symbol.is_weak,
provide_symbol.is_local, provide_symbol.is_template, provide_symb
ol.is_common
Sort Method: quicksort Memory: 27kB
-> Merge Join (cost=25234932.60..25286276.09 rows=397730 width=192)
(actual time=276.217..277.397 rows=35 loops=1)
Merge Cond: (libinstance.libinstanceid = libobject.libinstanceid)
-> Sort (cost=7950.07..7958.88 rows=3523 width=8) (actual
time=256.190..256.655 rows=1838 loops=1)
Sort Key: libinstance.libinstanceid
Sort Method: quicksort Memory: 135kB
-> Merge Join (cost=7604.97..7742.52 rows=3523 width=8)
(actual time=231.880..252.275 rows=1838 loops=1)
Merge Cond: (libinstance.libid = library.libid)
-> Sort (cost=5951.50..5960.32 rows=3529 width=12)
(actual time=156.866..157.638 rows=1849 loops=1)
Sort Key: libinstance.libid
Sort Method: quicksort Memory: 135kB
-> Merge Join (cost=5657.33..5743.55
rows=3529 width=12) (actual time=141.311..152.022 rows=1849 loops=1)
Merge Cond: (libinstance.entityid =
attributes.entityid)
-> Sort (cost=4143.42..4159.22
rows=6319 width=18) (actual time=126.355..128.805 rows=5532 loops=1)
Sort Key: libinstance.entityid
Sort Method: quicksort Memory:
625kB
-> Seq Scan on libinstance
(cost=0.00..3744.52 rows=6319 width=18) (actual time=0.074..107.409 rows=5533
loops=1)
Filter: ((libdate <=
1238186855) AND (enddate > 1238186855) AND (architecture = 1::smallint) AND
(branchid = 0) AND (istemp = 0))
-> Sort (cost=1513.91..1523.58
rows=3867 width=12) (actual time=14.936..15.698 rows=1999 loops=1)
Sort Key: attributes.entityid
Sort Method: quicksort Memory:
142kB
-> Bitmap Heap Scan on attributes
(cost=129.82..1283.50 rows=3867 width=12) (actual time=4.447..10.207 rows=1985
loops=1)
Recheck Cond: ((attribute =
ANY ('{notoffline,notoffline}'::text[])) AND (branchid = 0) AND (architecture =
1::smallint))
-> Bitmap Index Scan on
attributeindex3 (cost=0.00..128.86 rows=3867 width=0) (actual
time=4.206..4.206 rows=3970 loops=1)
Index Cond: ((attribute
= ANY ('{notoffline,notoffline}'::text[])) AND (branchid = 0) AND (architecture
= 1::smallint))
-> Sort (cost=1653.46..1695.81 rows=16939 width=4)
(actual time=74.998..80.969 rows=16958 loops=1)
Sort Key: library.libid
Sort Method: quicksort Memory: 1564kB
-> Seq Scan on library (cost=0.00..463.66
rows=16939 width=4) (actual time=0.024..23.808 rows=16968 loops=1)
Filter: (NOT secondary)
-> Materialize (cost=25226982.52..25346796.41 rows=9585111
width=188) (actual time=19.157..19.625 rows=490 loops=1)
-> Sort (cost=25226982.52..25250945.30 rows=9585111
width=188) (actual time=19.149..19.257 rows=490 loops=1)
Sort Key: libobject.libinstanceid
Sort Method: quicksort Memory: 64kB
-> Nested Loop (cost=0.00..23230910.12 rows=9585111
width=188) (actual time=0.236..18.276 rows=501 loops=1)
-> Nested Loop (cost=0.00..92332.83 rows=9981
width=184) (actual time=0.172..10.657 rows=509 loops=1)
-> Nested Loop (cost=0.00..41179.30
rows=9981 width=162) (actual time=0.117..4.166 rows=509 loops=1)
-> Seq Scan on temp_symbol
(cost=0.00..2.52 rows=52 width=148) (actual time=0.025..0.062 rows=52 loops=1)
-> Index Scan using
provsymbolindex1 on provide_symbol (cost=0.00..789.46 rows=192 width=18)
(actual time=0.027..0.066 rows=10 loops=52)
Index Cond:
((provide_symbol.symbolid = temp_symbol.symbolid) AND
(provide_symbol.symboltype = 'T'::bpchar))
-> Index Scan using objectinstance_pkey
on objectinstance (cost=0.00..5.11 rows=1 width=22) (actual time=0.010..0.011
rows=1 loops=509)
Index Cond:
(objectinstance.objinstance = provide_symbol.objinstance)
-> Index Scan using libobjindex2 on libobject
(cost=0.00..2306.21 rows=964 width=12) (actual time=0.012..0.013 rows=1
loops=509)
Index Cond: (libobject.objinstance =
provide_symbol.objinstance)
--
Sent via pgsql-performance mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance