Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Rule-based optimizer wins big over CBO - why?
I'm faced with a problem that I cannot identify or solve. For a
mysterious reason the RBO beats the CBO in stunning ways for the query
shown below.
With the RBO the query is completed in a half second but with CBO it takes 20 seconds or more. I have gathered system statistics as well as statistics against the indexes in play to no avail.
I have also tried experimenting with various values of the optimizer adj parameters but there is very little improvement (18 vs. 20 seconds) with vastly different explain plans. I have also disabled hash_joins with the CBO but a lousy access path comes from it as well. Only the RBO seems to create an access path that is quick. The SQL is generated by the application - the only remedy that I have to date is to use a stored outline forcing the use of the rule based optimizer.
I guess my fundamental question is "Why is the RBO winning so well" over CBO?
The clustering factor on the indexes is not so good.
Looking at temp_space in plan_table I see that there is a value of 1287000 there also.
CLUF for PK_ARTICLE_TAXONOMY_IDX is 63640 with 815615 rows.
Any advice or explanation would be greatly appreciated.
The query:
SELECT DISTINCT t1.art_id, t1.publish_date
FROM article t1, article_taxonomy t2 WHERE t2.art_id = t1.art_id AND t2.taxonomy_element_id IN (14051, 13036, 14053, 14055, 14057, 13060, 14059, 14061, 14063, 14065, 14067, 14069, 14077, 14079, 14075, 13074, 14071, 14073, 14085, 13087, 14081, 14083, 14087, 13083, 14089, 14091, 14093, 13079, 14095, 13096 ) AND t1.publish_date <= TO_DATE ('2004-07-12 09:00:00', 'YYYY-MM-DD HH.MI.SS') ORDER BY t1.publish_date DESC
Using CBO choose:
opened cursors cumulative 8 user calls 155 recursive calls 49 recursive cpu usage 1 session logical reads 21,654 CPU used when call started 1,853 CPU used by this session 1,853 session uga memory 37,504 session uga memory max 701,984 session pga memory 705,472 session pga memory max 705,472 enqueue requests 1 enqueue releases 1 db block gets 19 consistent gets 21,635 physical reads 3 free buffer requested 3 prefetched blocks 2 calls to get snapshot scn: kcmgss 2 no work - consistent read gets 21,635 table scans (long tables) 1 table scan rows gotten 201,095 table scan blocks gotten 19,104 index fast full scans (full) 1 buffer is not pinned count 19,104 parse time elapsed 1 parse count (total) 8 execute count 9 bytes sent via SQL*Net to client 169,178 bytes received via SQL*Net from client 29,928 SQL*Net roundtrips to/from client 148 sorts (memory) 1 sorts (rows)2,286
alter session set optimizer_mode=choose; Plan Table
| Operation | Name | Rows | Bytes|Cost | Pstart| Pstop |
| SELECT STATEMENT | | 19K| 464K| 7624 | | | | SORT UNIQUE | | 19K| 464K| 5972 | | | | HASH JOIN | | 19K| 464K| 4319 | | | | INDEX FAST FULL SCAN |PK_ARTICLE_TAXONOMY | 19K| 191K| 949 | | | | TABLE ACCESS FULL |ARTICLE | 200K| 2M| 3323 | | |
------------------------------------------------------------------------------------------
Using RBO:
alter session set optimizer_mode=rule;
Plan Table
| Operation | Name | Rows | Bytes|Cost | Pstart| Pstop |
| SELECT STATEMENT | | | | | | | | SORT UNIQUE | | | | | | | | CONCATENATION | | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | | | NESTED LOOPS | | | | | | | | TABLE ACCESS BY INDEX |ARTICLE_TAXONOMY | | | | | | | INDEX RANGE SCAN |ART_TAX_TAX_ELEMENT | | | | | | | TABLE ACCESS BY INDEX |ARTICLE | | | | | | | INDEX UNIQUE SCAN |PK_ARTICLE_IDX | | | | | |Received on Tue Jul 13 2004 - 18:34:35 CDT
------------------------------------------------------------------------------------------