Please help to debug strange execution plan
- From: Michael Seiwert <mseiwert@xxxxxx>
- To: oracle-l@xxxxxxxxxxxxx
- Date: Thu, 05 Jun 2008 11:53:30 +0200
Hi List,
I have two identical queries which differ only in the search term of the
contains clause. Both queries produce completely different execution
plans and execution times.
If I run the the following query with searchterm 'spartacus' in the
contains clause the query executes within 2 seconds, if I run the same
query with searchterm 'tatort' the query returns in about 20 minutes.
Please see the attached explain plans for details. Could you please help
me to debug this as I want to understand why oracle behaves how it
behaves :-) I'll could provide more information such as view definition,
10046, 10053 traces if needed.
SELECT s.ID, s.folgen_nummer, s.nettolaenge, s.genre_id, s.mandant_id,
von_jahr, t.titel AS titel, utit.titel AS untertitel
FROM sendungen s JOIN v_bildsuche t ON s.ID = t.send_id AND t.tiar_id = 1
LEFT OUTER JOIN v_bildsuche utit
ON (s.ID = utit.send_id) AND utit.tiar_id = 2
LEFT OUTER JOIN v_bildsuche origtit
ON (s.ID = origtit.send_id) AND origtit.tiar_id = 5
WHERE (titel IS NOT NULL AND contains (titel, 'tatort') > 0);
Thank you very much in advance.
Very best regards
Michael
SQL> select plan_table_output from
table(dbms_xplan.display('PLAN_TABLE',null,'ALL'));
-------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows
| Bytes | Cost (%CPU)|
-------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | |
1 | 214 | 24496 (1)|
| 1 | NESTED LOOPS | |
1 | 214 | 24496 (1)|
| 2 | NESTED LOOPS OUTER | |
1 | 170 | 24495 (1)|
| 3 | NESTED LOOPS | |
1 | 122 | 24494 (1)|
| 4 | NESTED LOOPS | |
1 | 96 | 24493 (1)|
| 5 | NESTED LOOPS | |
1 | 77 | 24492 (1)|
| 6 | TABLE ACCESS BY INDEX ROWID| TITELNAMEN |
41 | 2091 | 6 (0)|
|* 7 | DOMAIN INDEX | TITELNAMEN2_CTX |
| | 8 (0)|
|* 8 | TABLE ACCESS BY INDEX ROWID| TITELINSTANZ |
1 | 26 | 598 (1)|
|* 9 | INDEX RANGE SCAN | TITELINSTANZ_TITELNAMEN_ID_I |
3530 | | 7 (15)|
| 10 | TABLE ACCESS BY INDEX ROWID | SENDUNGEN |
1 | 19 | 2 (50)|
|* 11 | INDEX UNIQUE SCAN | SENDUNGEN_PK |
1 | | |
| 12 | TABLE ACCESS BY INDEX ROWID | TITELINSTANZ |
1 | 26 | 2 (50)|
|* 13 | INDEX RANGE SCAN | TITELINSTANZ_KEY1_I |
1 | | 2 (50)|
| 14 | VIEW PUSHED PREDICATE | V_BILDSUCHE |
1 | 48 | |
| 15 | NESTED LOOPS | |
1 | 70 | 3 (0)|
| 16 | TABLE ACCESS BY INDEX ROWID | TITELINSTANZ |
1 | 26 | 2 (0)|
|* 17 | INDEX RANGE SCAN | TITELINSTANZ_KEY1_I |
1 | | 4 (25)|
| 18 | TABLE ACCESS BY INDEX ROWID | TITELNAMEN |
1 | 44 | 2 (50)|
|* 19 | INDEX UNIQUE SCAN | TITELNAMEN_PK |
1 | | |
| 20 | TABLE ACCESS BY INDEX ROWID | TITELNAMEN |
1 | 44 | 2 (50)|
|* 21 | INDEX UNIQUE SCAN | TITELNAMEN_PK |
1 | | |
-------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
7 - access(("SYS_ALIAS_0001"."TITEL",'spartacus')>0)
8 - filter("SYS_ALIAS_0000"."REIHENFOLGE"=0 AND "SYS_ALIAS_0000"."TIAR_ID"=5
AND
TO_NUMBER("SYS_ALIAS_0000"."AKTIV")=1)
9 - access("SYS_ALIAS_0001"."ID"="SYS_ALIAS_0000"."TITELNAMEN_ID" AND
"SYS_ALIAS_0000"."OBJBR_ID"=0)
filter("SYS_ALIAS_0000"."OBJBR_ID"=0 AND
TO_NUMBER("SYS_ALIAS_0000"."VERWENDUNGSART")<>3)
11 - access("S"."ID"="SYS_ALIAS_0000"."SEND_ID")
13 - access("S"."ID"="Z"."SEND_ID" AND "Z"."TIAR_ID"=1 AND "Z"."OBJBR_ID"=0
AND "Z"."REIHENFOLGE"=0)
filter(TO_NUMBER("Z"."AKTIV")=1 AND TO_NUMBER("Z"."VERWENDUNGSART")<>3)
17 - access("S"."ID"="Z"."SEND_ID" AND "Z"."TIAR_ID"=2 AND "Z"."OBJBR_ID"=0
AND "Z"."REIHENFOLGE"=0)
filter(TO_NUMBER("Z"."AKTIV")=1 AND TO_NUMBER("Z"."VERWENDUNGSART")<>3)
19 - access("N"."ID"="Z"."TITELNAMEN_ID")
21 - access("N"."ID"="Z"."TITELNAMEN_ID")
43 rows selected.
SQL> spool off;
SQL> select plan_table_output from
table(dbms_xplan.display('PLAN_TABLE',null,'ALL'));
----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes
| Cost (%CPU)|
----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 214
| 169K (5)|
| 1 | NESTED LOOPS | | 1 | 214
| 169K (5)|
| 2 | NESTED LOOPS | | 1 | 170
| 169K (5)|
| 3 | NESTED LOOPS OUTER | | 1 | 119
| 169K (5)|
| 4 | NESTED LOOPS | | 1 | 71
| 169K (5)|
| 5 | NESTED LOOPS | | 1 | 45
| 169K (5)|
|* 6 | VIEW | index$_join$_014 | 1 | 26
| |
|* 7 | HASH JOIN | | 1 | 26
| |
|* 8 | INDEX FAST FULL SCAN | TITELINSTANZ_CK2 | 1 | 26
| 20576 (5)|
|* 9 | INDEX FAST FULL SCAN | TITELINSTANZ_KEY1_I | 1 | 26
| 20576 (5)|
| 10 | TABLE ACCESS BY INDEX ROWID| SENDUNGEN | 1 | 19
| 2 (50)|
|* 11 | INDEX UNIQUE SCAN | SENDUNGEN_PK | 1 |
| |
| 12 | TABLE ACCESS BY INDEX ROWID | TITELINSTANZ | 1 | 26
| 2 (50)|
|* 13 | INDEX RANGE SCAN | TITELINSTANZ_KEY1_I | 1 |
| 2 (50)|
| 14 | VIEW PUSHED PREDICATE | V_BILDSUCHE | 1 | 48
| |
| 15 | NESTED LOOPS | | 1 | 70
| 3 (0)|
| 16 | TABLE ACCESS BY INDEX ROWID| TITELINSTANZ | 1 | 26
| 2 (0)|
|* 17 | INDEX RANGE SCAN | TITELINSTANZ_KEY1_I | 1 |
| 4 (25)|
| 18 | TABLE ACCESS BY INDEX ROWID| TITELNAMEN | 1 | 44
| 2 (50)|
|* 19 | INDEX UNIQUE SCAN | TITELNAMEN_PK | 1 |
| |
|* 20 | TABLE ACCESS BY INDEX ROWID | TITELNAMEN | 1 | 51
| 2 (50)|
|* 21 | INDEX UNIQUE SCAN | TITELNAMEN_PK | 1 |
| |
| 22 | TABLE ACCESS BY INDEX ROWID | TITELNAMEN | 1 | 44
| 2 (50)|
|* 23 | INDEX UNIQUE SCAN | TITELNAMEN_PK | 1 |
| |
----------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
6 - filter("SYS_ALIAS_0000"."REIHENFOLGE"=0 AND "SYS_ALIAS_0000"."TIAR_ID"=5
AND
TO_NUMBER("SYS_ALIAS_0000"."AKTIV")=1 AND
"SYS_ALIAS_0000"."OBJBR_ID"=0 AND
TO_NUMBER("SYS_ALIAS_0000"."VERWENDUNGSART")<>3)
7 - access("indexjoin$_alias$_017".ROWID="indexjoin$_alias$_016".ROWID)
8 - filter(TO_NUMBER("indexjoin$_alias$_016"."VERWENDUNGSART")<>3 AND
TO_NUMBER("indexjoin$_alias$_016"."AKTIV")=1 AND
"indexjoin$_alias$_016"."OBJBR_ID"=0 AND
"indexjoin$_alias$_016"."TIAR_ID"=5)
9 - filter(TO_NUMBER("indexjoin$_alias$_017"."VERWENDUNGSART")<>3 AND
TO_NUMBER("indexjoin$_alias$_017"."AKTIV")=1 AND
"indexjoin$_alias$_017"."REIHENFOLGE"=0 AND
"indexjoin$_alias$_017"."OBJBR_ID"=0 AND
"indexjoin$_alias$_017"."TIAR_ID"=5)
11 - access("S"."ID"="SYS_ALIAS_0000"."SEND_ID")
13 - access("S"."ID"="Z"."SEND_ID" AND "Z"."TIAR_ID"=1 AND "Z"."OBJBR_ID"=0
AND
"Z"."REIHENFOLGE"=0)
filter(TO_NUMBER("Z"."AKTIV")=1 AND TO_NUMBER("Z"."VERWENDUNGSART")<>3)
17 - access("S"."ID"="Z"."SEND_ID" AND "Z"."TIAR_ID"=2 AND "Z"."OBJBR_ID"=0
AND
"Z"."REIHENFOLGE"=0)
filter(TO_NUMBER("Z"."AKTIV")=1 AND TO_NUMBER("Z"."VERWENDUNGSART")<>3)
19 - access("N"."ID"="Z"."TITELNAMEN_ID")
20 - filter(("SYS_ALIAS_0001"."TITEL",'tatort')>0)
21 - access("SYS_ALIAS_0001"."ID"="SYS_ALIAS_0000"."TITELNAMEN_ID")
23 - access("N"."ID"="Z"."TITELNAMEN_ID")
54 rows selected.
SQL> spool off
- Follow-Ups:
- Re: Please help to debug strange execution plan
- From: Jared Still
Other related posts:
- » Please help to debug strange execution plan
- » Re: Please help to debug strange execution plan
- » Re: Please help to debug strange execution plan
- » Re: Please help to debug strange execution plan
- Re: Please help to debug strange execution plan
- From: Jared Still