Re: Trying to track down weird query stalls

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

 



> On Mon, Mar 30, 2009 at 4:02 PM,  <dan@xxxxxxxxx> wrote:
>>> On Mon, Mar 30, 2009 at 1:42 PM,  <dan@xxxxxxxxx> wrote:
>>>>> On Mon, Mar 30, 2009 at 12:42 PM,  <dan@xxxxxxxxx> 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 (pgsql-performance@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance

[Postgresql General]     [Postgresql PHP]     [PHP Users]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Yosemite]

  Powered by Linux