Endless loop in ExecNestLoop - Mailing list pgsql-bugs

From Philipp Reisner
Subject Endless loop in ExecNestLoop
Date
Msg-id 200601301745.07031.philipp.reisner@linbit.com
Whole thread Raw
Responses Re: Endless loop in ExecNestLoop
List pgsql-bugs
Hi,

The symptom:

The PostgreSQL backend sometimes does not terminate a query. (Killed after
the backend consumed 1h30 of CPU time.)

That query usually executes in less than 2 seconds, see also the explain=20
analyze.

Version: 8.0.2

Query:
select cel.objid,
             cel.shortname, ser.shortname,
             con.isInventoryFlag,
             dev.objid, dty.objid, loc.objid,
             dev.shortname, loc.shortname, loc.name, man.shortName,
             dty.type, dev.serNr, dev.invNr, dev.component,
             loc.zip, loc.city, con.shortname, con.name,
            CASE
       WHEN CURRENT_DATE between loc.locationstateFrom  and=20
loc.locationstateTo  THEN loc.locationstateText
       WHEN CURRENT_DATE between loc.locationstate2From and=20
loc.locationstate2To THEN loc.locationstate2Text
       ELSE null
     END
     ,      CASE
       WHEN CURRENT_DATE between loc.locationstateFrom  and=20
loc.locationstateTo  THEN loc.locationstateColorCode
       WHEN CURRENT_DATE between loc.locationstate2From and=20
loc.locationstate2To THEN loc.locationstate2ColorCode
       ELSE null
     END
     ,
            loc.locationcategory, loc.province
       from contracts con, contractelements cel
            left outer join servicetypes ser on ser.objid =3D cel.ser_objid,
            devices dev, locations loc, devicetypes dty, bpartners man
     where con.csp_objid in=20
(587703,587726,728917,969346,1043154,1368907,1368915,1368944,4176279,449240=
5,4493459,5682484,7465538)
  and cel.con_objid =3D con.objid
       and dev.cel_objid =3D cel.objid
       and loc.objid =3D dev.loc_objid
       and dty.objid =3D dev.dty_objid
       and man.objid =3D dty.bpa_objid
       and upper(cel.isActiv) =3D 'Y'
       and upper(coalesce(dev.isActiv,'Y')) =3D 'Y'
       and upper(coalesce(dev.IsCommittedSP,'Y')) =3D 'Y'
       and upper(coalesce(dev.IsCommittedCust,'Y')) =3D 'Y'
      and upper(loc.shortName)  =3D 'WNB531'
       order by 18 ASC

Explain Analyze:

 Sort  (cost=3D12084.89..12084.89 rows=3D1 width=3D477) (actual=20
time=3D1344.417..1344.424 rows=3D5 loops=3D1)
   Sort Key: con.shortname
   ->  Nested Loop  (cost=3D79.18..12084.88 rows=3D1 width=3D477) (actual=
=20
time=3D977.884..1343.987 rows=3D5 loops=3D1)
         ->  Nested Loop  (cost=3D79.18..12081.71 rows=3D1 width=3D130) (ac=
tual=20
time=3D6.363..1215.421 rows=3D12829 loops=3D1)
               ->  Nested Loop  (cost=3D79.18..12078.64 rows=3D1 width=3D12=
5)=20
(actual time=3D6.315..1045.691 rows=3D12829 loops=3D1)
                     ->  Nested Loop  (cost=3D79.18..12075.58 rows=3D1 widt=
h=3D111)=20
(actual time=3D6.256..855.119 rows=3D12829 loops=3D1)
                           ->  Hash Join  (cost=3D79.18..4321.10 rows=3D8=
=20
width=3D52) (actual time=3D5.668..666.173 rows=3D101 loops=3D1)
                                 Hash Cond: ("outer".con_objid =3D=20
"inner".objid)
                                 ->  Hash Left Join  (cost=3D1.18..4241.09=
=20
rows=3D385 width=3D27) (actual time=3D3.067..535.397 rows=3D73383 loops=3D1)
                                       Hash Cond: ("outer".ser_objid =3D=20
"inner".objid)
                                       ->  Seq Scan on contractelements cel=
=20=20
(cost=3D0.00..4237.98 rows=3D385 width=3D21) (actual time=3D2.869..285.115 =
rows=3D73383=20
loops=3D1)
                                             Filter: (upper((isactiv)::text=
) =3D=20
'Y'::text)
                                       ->  Hash  (cost=3D1.14..1.14 rows=3D=
14=20
width=3D14) (actual time=3D0.092..0.092 rows=3D14 loops=3D1)
                                             ->  Seq Scan on servicetypes s=
er=20=20
(cost=3D0.00..1.14 rows=3D14 width=3D14) (actual time=3D0.024..0.052 rows=
=3D14 loops=3D1)
                                 ->  Hash  (cost=3D77.82..77.82 rows=3D73=
=20
width=3D33) (actual time=3D0.378..0.378 rows=3D31 loops=3D1)
                                       ->  Bitmap Heap Scan on contracts co=
n=20=20
(cost=3D26.26..77.82 rows=3D73 width=3D33) (actual time=3D0.196..0.304 rows=
=3D31=20
loops=3D1)
                                             Recheck Cond: ((csp_objid =3D=
=20
587703) OR (csp_objid =3D 587726) OR (csp_objid =3D 728917) OR (csp_objid =
=3D=20
969346) OR (csp_objid =3D 1043154) OR (csp_objid =3D 1368907) OR (csp_objid=
 =3D=20
1368915) OR (csp_objid =3D 1368944) OR (csp_objid =3D 4176279) OR (csp_obji=
d =3D=20
4492405) OR (csp_objid =3D 4493459) OR (csp_objid =3D 5682484) OR (csp_obji=
d =3D=20
7465538))
                                             ->  BitmapOr  (cost=3D26.26..2=
6.26=20
rows=3D74 width=3D0) (actual time=3D0.160..0.160 rows=3D0 loops=3D1)
                                                   ->  Bitmap Index Scan on=
=20
contracts_csp_objid  (cost=3D0.00..2.12 rows=3D34 width=3D0) (actual=20
time=3D0.077..0.077 rows=3D31 loops=3D1)
                                                         Index Cond:=20
(csp_objid =3D 587703)
                                                   ->  Bitmap Index Scan on=
=20
contracts_csp_objid  (cost=3D0.00..2.01 rows=3D3 width=3D0) (actual=20
time=3D0.005..0.005 rows=3D0 loops=3D1)
                                                         Index Cond:=20
(csp_objid =3D 587726)
                                                   ->  Bitmap Index Scan on=
=20
contracts_csp_objid  (cost=3D0.00..2.01 rows=3D3 width=3D0) (actual=20
time=3D0.004..0.004 rows=3D0 loops=3D1)
                                                         Index Cond:=20
(csp_objid =3D 728917)
                                                   ->  Bitmap Index Scan on=
=20
contracts_csp_objid  (cost=3D0.00..2.01 rows=3D3 width=3D0) (actual=20
time=3D0.004..0.004 rows=3D0 loops=3D1)
                                                         Index Cond:=20
(csp_objid =3D 969346)
                                                   ->  Bitmap Index Scan on=
=20
contracts_csp_objid  (cost=3D0.00..2.01 rows=3D3 width=3D0) (actual=20
time=3D0.004..0.004 rows=3D0 loops=3D1)
                                                         Index Cond:=20
(csp_objid =3D 1043154)
                                                   ->  Bitmap Index Scan on=
=20
contracts_csp_objid  (cost=3D0.00..2.01 rows=3D3 width=3D0) (actual=20
time=3D0.010..0.010 rows=3D0 loops=3D1)
                                                         Index Cond:=20
(csp_objid =3D 1368907)
                                                   ->  Bitmap Index Scan on=
=20
contracts_csp_objid  (cost=3D0.00..2.01 rows=3D3 width=3D0) (actual=20
time=3D0.004..0.004 rows=3D0 loops=3D1)
                                                         Index Cond:=20
(csp_objid =3D 1368915)
                                                   ->  Bitmap Index Scan on=
=20
contracts_csp_objid  (cost=3D0.00..2.01 rows=3D3 width=3D0) (actual=20
time=3D0.004..0.004 rows=3D0 loops=3D1)
                                                         Index Cond:=20
(csp_objid =3D 1368944)
                                                   ->  Bitmap Index Scan on=
=20
contracts_csp_objid  (cost=3D0.00..2.01 rows=3D3 width=3D0) (actual=20
time=3D0.005..0.005 rows=3D0 loops=3D1)
                                                         Index Cond:=20
(csp_objid =3D 4176279)
                                                   ->  Bitmap Index Scan on=
=20
contracts_csp_objid  (cost=3D0.00..2.01 rows=3D3 width=3D0) (actual=20
time=3D0.004..0.004 rows=3D0 loops=3D1)
                                                         Index Cond:=20
(csp_objid =3D 4492405)
                                                   ->  Bitmap Index Scan on=
=20
contracts_csp_objid  (cost=3D0.00..2.01 rows=3D3 width=3D0) (actual=20
time=3D0.004..0.004 rows=3D0 loops=3D1)
                                                         Index Cond:=20
(csp_objid =3D 4493459)
                                                   ->  Bitmap Index Scan on=
=20
contracts_csp_objid  (cost=3D0.00..2.01 rows=3D3 width=3D0) (actual=20
time=3D0.004..0.004 rows=3D0 loops=3D1)
                                                         Index Cond:=20
(csp_objid =3D 5682484)
                                                   ->  Bitmap Index Scan on=
=20
contracts_csp_objid  (cost=3D0.00..2.01 rows=3D3 width=3D0) (actual=20
time=3D0.005..0.005 rows=3D0 loops=3D1)
                                                         Index Cond:=20
(csp_objid =3D 7465538)
                           ->  Index Scan using devices_cel_objid on device=
s=20
dev  (cost=3D0.00..969.30 rows=3D1 width=3D63) (actual time=3D0.588..1.401 =
rows=3D127=20
loops=3D101)
                                 Index Cond: (dev.cel_objid =3D "outer".obj=
id)
                                 Filter: ((upper((COALESCE(isactiv,=20
'Y'::character varying))::text) =3D 'Y'::text) AND=20
(upper((COALESCE(iscommittedsp, 'Y'::character varying))::text) =3D 'Y'::te=
xt)=20
AND (upper((COALESCE(iscommittedcust, 'Y'::character varying))::text) =3D=
=20
'Y'::text))
                     ->  Index Scan using devicetypes_pkey on devicetypes d=
ty=20=20
(cost=3D0.00..3.04 rows=3D1 width=3D18) (actual time=3D0.005..0.007 rows=3D=
1=20
loops=3D12829)
                           Index Cond: (dty.objid =3D "outer".dty_objid)
               ->  Index Scan using bpartners_pkey on bpartners man=20=20
(cost=3D0.00..3.06 rows=3D1 width=3D13) (actual time=3D0.004..0.006 rows=3D=
1=20
loops=3D12829)
                     Index Cond: (man.objid =3D "outer".bpa_objid)
         ->  Index Scan using locations_pkey on locations loc=20=20
(cost=3D0.00..3.11 rows=3D1 width=3D351) (actual time=3D0.006..0.006 rows=
=3D0=20
loops=3D12829)
               Index Cond: (loc.objid =3D "outer".loc_objid)
               Filter: (upper((shortname)::text) =3D 'WNB531'::text)
 Total runtime: 1345.103 ms
(55 rows)

Stack trace of the hanging backend.

#0  0x000000000043c743 in heap_deformtuple ()
#1  0x000000000043c949 in slot_getattr ()
#2  0x00000000004e3fae in ExecMakeTableFunctionResult ()
#3  0x00000000004e210d in ExecMakeFunctionResult ()
#4  0x00000000004e210d in ExecMakeFunctionResult ()
#5  0x00000000004e5063 in ExecQual ()
#6  0x00000000004e554e in ExecScan ()
#7  0x00000000004e0cc8 in ExecProcNode ()
#8  0x00000000004ebeb6 in ExecEndHashJoin ()
#9  0x00000000004eb7fa in ExecHashJoin ()
#10 0x00000000004e0d50 in ExecProcNode ()
#11 0x00000000004ee29d in ExecNestLoop ()
#12 0x00000000004e0d36 in ExecProcNode ()
#13 0x00000000004ee261 in ExecNestLoop ()   <-------
#14 0x00000000004e0d36 in ExecProcNode ()
#15 0x00000000004ee261 in ExecNestLoop ()
#16 0x00000000004e0d36 in ExecProcNode ()
#17 0x00000000004ee261 in ExecNestLoop ()
#18 0x00000000004e0d36 in ExecProcNode ()
#19 0x00000000004ee261 in ExecNestLoop ()
#20 0x00000000004e0d36 in ExecProcNode ()
#21 0x00000000004ef57c in ExecSort ()
#22 0x00000000004e0d6a in ExecProcNode ()
#23 0x00000000004df73f in ExecEndPlan ()
#24 0x00000000004dec09 in ExecutorRun ()
#25 0x000000000055f87a in PortalRun ()
#26 0x000000000055f5f9 in PortalRun ()
#27 0x000000000055b561 in pg_plan_queries ()
#28 0x000000000055df8c in PostgresMain ()
#29 0x0000000000539b01 in ClosePostmasterPorts ()
#30 0x00000000005395d0 in ClosePostmasterPorts ()
#31 0x0000000000537b4d in PostmasterMain ()
#32 0x0000000000536e59 in PostmasterMain ()
#33 0x00000000004fda0c in main ()

With gdb's ability to execute until the current function (stack frame) retu=
rn,
I found out which function (stack frame) is the up-most in this endless loo=
p.
That frame is marked with the arrow.

Is this bug-report of any use so far ?

best regards,
  Philipp Reisner
--=20
: Dipl-Ing Philipp Reisner                      Tel +43-1-8178292-50 :
: LINBIT Information Technologies GmbH          Fax +43-1-8178292-82 :
: Sch=F6nbrunnerstr 244, 1120 Vienna, Austria    http://www.linbit.com :

pgsql-bugs by date:

Previous
From: Tom Lane
Date:
Subject: Re: BUG #2224: unlogical syntax error
Next
From: "Mehul Doshi-A20614"
Date:
Subject: Shared library issue in Windows