dbTalk Databases Forums  

explain plan shows fts on same table multiple times with differentcosts

comp.databases.oracle.misc comp.databases.oracle.misc


Discuss explain plan shows fts on same table multiple times with differentcosts in the comp.databases.oracle.misc forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
wodenic@googlemail.com
 
Posts: n/a

Default explain plan shows fts on same table multiple times with differentcosts - 04-22-2009 , 03:51 PM






Hi,

Sorry if this is a simple question.
It may be relevant to all versions, but this one comes from 10.2.0.4

The statement reads from the BKMAP_CONTRACT_LINE 3 times in this
statement all using full table scans, but the reported cost for each
fts differs

Is this usual?
Is the difference in cost caused by dbms_xplan being aware of the
likelihood that many of the rows will already been in the buffer cache
(presumably from the largest fts - Id 13)

I expected to see the same cost for each fts on the
BKMAP_CONTRACT_LINE - hence the reason for my question

thanks
Craig

---------------------------------------------------------------------------------------------------------------
Quote:
Id | Operation | Name | Rows
Bytes |TempSpc| Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------------------------
0 | SELECT STATEMENT | |
550K| 222M| | 150K (6)| 01:22:39 |
* 1 | HASH JOIN RIGHT OUTER | |
550K| 222M| 36M| 150K (6)| 01:22:39 |
2 | INDEX FAST FULL SCAN | BKMAP_CUSTOMER_SITE_N02 |
1601K| 18M| | 75 (14)| 00:00:03 |
* 3 | HASH JOIN OUTER | |
550K| 216M| 180M| 148K (6)| 01:21:13 |
* 4 | HASH JOIN | |
550K| 173M| 157M| 117K (6)| 01:04:32 |
* 5 | HASH JOIN RIGHT OUTER | |
550K| 151M| 17M| 82844 (8)| 00:45:25 |
6 | TABLE ACCESS FULL | BKMAP_MATERIAL_ITEM |
781K| 9162K| | 231 (19)| 00:00:08 |
* 7 | HASH JOIN OUTER | |
550K| 144M| 130M| 80959 (8)| 00:44:23 |
* 8 | HASH JOIN | |
550K| 124M| 150M| 66175 (7)| 00:36:17 |
* 9 | HASH JOIN | |
820K| 140M| 17M| 50570 (8)| 00:27:44 |
* 10 | HASH JOIN | |
310K| 13M| | 5205 (5)| 00:02:52 |
* 11 | TABLE ACCESS FULL| BKMAP_ORG_TO_GEO_XREF | 3
27 | | 3 (0)| 00:00:01 |
* 12 | TABLE ACCESS FULL| BKMAP_CONTRACT_HEADER |
5957K| 210M| | 5174 (5)| 00:02:51 |
* 13 | TABLE ACCESS FULL | BKMAP_CONTRACT_LINE |
15M| 2012M| | 23742 (14)| 00:13:01 |
14 | TABLE ACCESS FULL | BKMAP_CONTRACT_REFERENCES |
15M| 866M| | 3799 (13)| 00:02:05 |
15 | TABLE ACCESS FULL | BKMAP_ITEM_INSTANCES |
13M| 512M| | 6873 (20)| 00:03:47 |
16 | TABLE ACCESS FULL | BKMAP_CONTRACT_LINE |
23M| 974M| | 20994 (3)| 00:11:31 |
* 17 | TABLE ACCESS FULL | BKMAP_CONTRACT_LINE |
8009K| 618M| | 21715 (6)| 00:11:55 |
---------------------------------------------------------------------------------------------------------------


Reply With Quote
  #2  
Old   
joel garry
 
Posts: n/a

Default Re: explain plan shows fts on same table multiple times withdifferent costs - 04-22-2009 , 06:15 PM






On Apr 22, 1:51*pm, wode... (AT) googlemail (DOT) com wrote:
Quote:
Hi,

Sorry if this is a simple question.
It may be relevant to all versions, but this one comes from 10.2.0.4

The statement reads from the BKMAP_CONTRACT_LINE 3 times in this
statement all using full table scans, but the reported cost for each
fts differs

Is this usual?
Is the difference in cost caused by dbms_xplan being aware of the
likelihood that many of the rows will already been in the buffer cache
(presumably from the largest fts - Id 13)

I expected to see the same cost for each fts on the
BKMAP_CONTRACT_LINE - hence the reason for my question

thanks
Craig

---------------------------------------------------------------------------*------------------------------------
| Id *| Operation * * * * * * * * | Name * * * * * * * * * * *| Rows
| Bytes |TempSpc| Cost (%CPU)| Time * * |
---------------------------------------------------------------------------*------------------------------------
| * 0 | SELECT STATEMENT * * * * *| * * * * * * * * * * * * * |
550K| * 222M| * * * | * 150K *(6)| 01:22:39 |
|* *1 | *HASH JOIN RIGHT OUTER * *| * * * * * * * * * * * * * |
550K| * 222M| * *36M| * 150K *(6)| 01:22:39 |
| * 2 | * INDEX FAST FULL SCAN * *| BKMAP_CUSTOMER_SITE_N02 * |
1601K| * *18M| * * * | * *75 *(14)| 00:00:03 |
|* *3 | * HASH JOIN OUTER * * * * | * * * * * * * * * * * * * |
550K| * 216M| * 180M| * 148K *(6)| 01:21:13 |
|* *4 | * *HASH JOIN * * * * * * *| * * * * * * * * * * * * * |
550K| * 173M| * 157M| * 117K *(6)| 01:04:32 |
|* *5 | * * HASH JOIN RIGHT OUTER | * * * * * * * ** * * * * |
550K| * 151M| * *17M| 82844 * (8)| 00:45:25 |
| * 6 | * * *TABLE ACCESS FULL * *| BKMAP_MATERIAL_ITEM * * * |
781K| *9162K| * * * | * 231 *(19)| 00:00:08 |
|* *7 | * * *HASH JOIN OUTER * * *| * * * * * ** * * * * * * |
550K| * 144M| * 130M| 80959 * (8)| 00:44:23 |
|* *8 | * * * HASH JOIN * * * * * | * * * * ** * * * * * * * |
550K| * 124M| * 150M| 66175 * (7)| 00:36:17 |
|* *9 | * * * *HASH JOIN * * * * *| * * * * * * * * * * * * * |
820K| * 140M| * *17M| 50570 * (8)| 00:27:44 |
|* 10 | * * * * HASH JOIN * * * * | * * * * * * * * * * * * * |
310K| * *13M| * * * | *5205 * (5)| 00:02:52 |
|* 11 | * * * * *TABLE ACCESS FULL| BKMAP_ORG_TO_GEO_XREF * * | * * 3
| * *27 | * * * | * * 3 * (0)| 00:00:01 |
|* 12 | * * * * *TABLE ACCESS FULL| BKMAP_CONTRACT_HEADER * * |
5957K| * 210M| * * * | *5174 * (5)| 00:02:51 |
|* 13 | * * * * TABLE ACCESS FULL | BKMAP_CONTRACT_LINE * * * |
15M| *2012M| * * * | 23742 *(14)| 00:13:01 |
| *14 | * * * *TABLE ACCESS FULL *| BKMAP_CONTRACT_REFERENCES|
15M| * 866M| * * * | *3799 *(13)| 00:02:05 |
| *15 | * * * TABLE ACCESS FULL * | BKMAP_ITEM_INSTANCES * * *|
13M| * 512M| * * * | *6873 *(20)| 00:03:47 |
| *16 | * * TABLE ACCESS FULL * * | BKMAP_CONTRACT_LINE * ** |
23M| * 974M| * * * | 20994 * (3)| 00:11:31 |
|* 17 | * *TABLE ACCESS FULL * * *| BKMAP_CONTRACT_LINE * ** |
8009K| * 618M| * * * | 21715 * (6)| 00:11:55 |
---------------------------------------------------------------------------*------------------------------------
It's getting different numbers of rows and total size of data for each
scan. You'd probably want it to just do the full table scan one
time? What does the code look like?

jg
--
@home.com is bogus.
http://perens.com/works/articles/MorganHill/


Reply With Quote
  #3  
Old   
wodenic@googlemail.com
 
Posts: n/a

Default Re: explain plan shows fts on same table multiple times withdifferent costs - 04-22-2009 , 06:37 PM



hi,

yes a single scan would be preferable, but given the statement, it
doesn't seem possible

Its more of a curiosity than anything else

SELECT
BKMAP_CONTRACT_LINE.LOAD_DATE,
BKMAP_CONTRACT_LINE.LINE_NUMBER,
BKMAP_CONTRACT_LINE.PARENT_LINE_ID,
BKMAP_CONTRACT_LINE.CONTRACT_HEADER_ID,
BKMAP_CONTRACT_LINE.STS_CODE,
BKMAP_CONTRACT_LINE.LAST_UPDATE_DATE,
BKMAP_CONTRACT_LINE.START_DATE,
BKMAP_CONTRACT_LINE.END_DATE,
BKMAP_CONTRACT_LINE.COVERAGE_CODE,
BKMAP_CONTRACT_LINE.QUANTITY,
BKMAP_CONTRACT_HEADER.CONTRACT_NUMBER,
BKMAP_CONTRACT_HEADER.SCS_CODE,
BKMAP_CONTRACT_LINE1.LINE_NUMBER,
BKMAP_ITEM_INSTANCES.SERIAL_NUMBER,
BKMAP_ITEM_INSTANCES.INSTALL_DATE,
BKMAP_ITEM_INSTANCES.MARKETING_PART_NUMBER,
BKMAP_MATERIAL_ITEM.PRODUCT_CODE,
DECODE(BKMAP_CONTRACT_HEADER.SCS_CODE, 'WARRANTY',
BKMAP_CONTRACT_REFERENCES.INSTALL_LOCATION_ID, 'SERVICE',
BKMAP_CUSTOMER_SITE.PARTY_SITE_ID) AS LKP_PARTY_SITE,
BKMAP_CONTRACT_REFERENCES.INSTANCE_ID,
BKMAP_CONTRACT_LINE.CONTRACT_LINE_ID,
BKMAP_CONTRACT_LINE.ATTRIBUTE1,
BKMAP_CONTRACT_LINE.RELATED_OBJECT_TYPE,
BKMAP_CUSTOMER_SITE.PARTY_SITE_ID,
BKMAP_CONTRACT_REFERENCES.INSTALL_LOCATION_ID
FROM
BKMAP_CONTRACT_LINE,
BKMAP_ORG_TO_GEO_XREF,
BKMAP_CONTRACT_HEADER,
BKMAP_CONTRACT_LINE BKMAP_CONTRACT_LINE1,
BKMAP_CONTRACT_REFERENCES,
BKMAP_ITEM_INSTANCES,
BKMAP_MATERIAL_ITEM,
BKMAP_CUSTOMER_SITE,
(SELECT LINE.SHIP_TO_SITE_USE_ID, LINE.CONTRACT_LINE_ID
FROM BKMAP_CONTRACT_LINE LINE
WHERE
LINE.PARENT_LINE_ID is null) SHIP
WHERE
BKMAP_CONTRACT_HEADER.CONTRACT_HEADER_ID =
BKMAP_CONTRACT_LINE.CONTRACT_HEADER_ID
AND BKMAP_CONTRACT_LINE.PARENT_LINE_ID =
BKMAP_CONTRACT_LINE1.CONTRACT_LINE_ID
AND BKMAP_CONTRACT_LINE.PARENT_LINE_ID =
BKMAP_CONTRACT_LINE1.CONTRACT_LINE_ID
AND BKMAP_ORG_TO_GEO_XREF.AUTHORING_ORG_ID =
BKMAP_CONTRACT_HEADER.AUTHORING_ORG_ID
AND BKMAP_CONTRACT_LINE.CONTRACT_HEADER_ID =
BKMAP_CONTRACT_REFERENCES.CONTRACT_HEADER_ID
AND BKMAP_CONTRACT_LINE.CONTRACT_LINE_ID =
BKMAP_CONTRACT_REFERENCES.CONTRACT_LINE_ID
AND BKMAP_CONTRACT_REFERENCES.INSTANCE_ID =
BKMAP_ITEM_INSTANCES.INSTANCE_ID(+)
AND BKMAP_ITEM_INSTANCES.INVENTORY_ITEM_ID =
BKMAP_MATERIAL_ITEM.INVENTORY_ITEM_ID(+)
AND BKMAP_CONTRACT_LINE.PARENT_LINE_ID = SHIP.CONTRACT_LINE_ID(+)
AND SHIP.SHIP_TO_SITE_USE_ID = BKMAP_CUSTOMER_SITE.SITE_USE_ID(+)
AND BKMAP_CONTRACT_LINE.PARENT_LINE_ID IS NOT NULL
AND BKMAP_ORG_TO_GEO_XREF.SERVICE_GEO_ID = 'US'
AND (BKMAP_CONTRACT_HEADER.SCS_CODE = 'WARRANTY' OR
(BKMAP_CONTRACT_HEADER.STS_CODE IN ('ACTIVE', 'EXPIRED',
'HOLD',
'QA_HOLD', 'TERMINATED')
AND BKMAP_CONTRACT_HEADER.SCS_CODE = 'SERVICE'));

thanks
Craig

Reply With Quote
  #4  
Old   
Michael Austin
 
Posts: n/a

Default Re: explain plan shows fts on same table multiple times with differentcosts - 04-22-2009 , 07:36 PM



wodenic (AT) googlemail (DOT) com wrote:
Quote:
hi,

yes a single scan would be preferable, but given the statement, it
doesn't seem possible

Its more of a curiosity than anything else

SELECT
BKMAP_CONTRACT_LINE.LOAD_DATE,
BKMAP_CONTRACT_LINE.LINE_NUMBER,
BKMAP_CONTRACT_LINE.PARENT_LINE_ID,
BKMAP_CONTRACT_LINE.CONTRACT_HEADER_ID,
BKMAP_CONTRACT_LINE.STS_CODE,
BKMAP_CONTRACT_LINE.LAST_UPDATE_DATE,
BKMAP_CONTRACT_LINE.START_DATE,
BKMAP_CONTRACT_LINE.END_DATE,
BKMAP_CONTRACT_LINE.COVERAGE_CODE,
BKMAP_CONTRACT_LINE.QUANTITY,
BKMAP_CONTRACT_HEADER.CONTRACT_NUMBER,
BKMAP_CONTRACT_HEADER.SCS_CODE,
BKMAP_CONTRACT_LINE1.LINE_NUMBER,
BKMAP_ITEM_INSTANCES.SERIAL_NUMBER,
BKMAP_ITEM_INSTANCES.INSTALL_DATE,
BKMAP_ITEM_INSTANCES.MARKETING_PART_NUMBER,
BKMAP_MATERIAL_ITEM.PRODUCT_CODE,
DECODE(BKMAP_CONTRACT_HEADER.SCS_CODE, 'WARRANTY',
BKMAP_CONTRACT_REFERENCES.INSTALL_LOCATION_ID, 'SERVICE',
BKMAP_CUSTOMER_SITE.PARTY_SITE_ID) AS LKP_PARTY_SITE,
BKMAP_CONTRACT_REFERENCES.INSTANCE_ID,
BKMAP_CONTRACT_LINE.CONTRACT_LINE_ID,
BKMAP_CONTRACT_LINE.ATTRIBUTE1,
BKMAP_CONTRACT_LINE.RELATED_OBJECT_TYPE,
BKMAP_CUSTOMER_SITE.PARTY_SITE_ID,
BKMAP_CONTRACT_REFERENCES.INSTALL_LOCATION_ID
FROM
BKMAP_CONTRACT_LINE,
BKMAP_ORG_TO_GEO_XREF,
BKMAP_CONTRACT_HEADER,
BKMAP_CONTRACT_LINE BKMAP_CONTRACT_LINE1,
BKMAP_CONTRACT_REFERENCES,
BKMAP_ITEM_INSTANCES,
BKMAP_MATERIAL_ITEM,
BKMAP_CUSTOMER_SITE,
(SELECT LINE.SHIP_TO_SITE_USE_ID, LINE.CONTRACT_LINE_ID
FROM BKMAP_CONTRACT_LINE LINE
WHERE
LINE.PARENT_LINE_ID is null) SHIP
WHERE
BKMAP_CONTRACT_HEADER.CONTRACT_HEADER_ID =
BKMAP_CONTRACT_LINE.CONTRACT_HEADER_ID
AND BKMAP_CONTRACT_LINE.PARENT_LINE_ID =
BKMAP_CONTRACT_LINE1.CONTRACT_LINE_ID
AND BKMAP_CONTRACT_LINE.PARENT_LINE_ID =
BKMAP_CONTRACT_LINE1.CONTRACT_LINE_ID
AND BKMAP_ORG_TO_GEO_XREF.AUTHORING_ORG_ID =
BKMAP_CONTRACT_HEADER.AUTHORING_ORG_ID
AND BKMAP_CONTRACT_LINE.CONTRACT_HEADER_ID =
BKMAP_CONTRACT_REFERENCES.CONTRACT_HEADER_ID
AND BKMAP_CONTRACT_LINE.CONTRACT_LINE_ID =
BKMAP_CONTRACT_REFERENCES.CONTRACT_LINE_ID
AND BKMAP_CONTRACT_REFERENCES.INSTANCE_ID =
BKMAP_ITEM_INSTANCES.INSTANCE_ID(+)
AND BKMAP_ITEM_INSTANCES.INVENTORY_ITEM_ID =
BKMAP_MATERIAL_ITEM.INVENTORY_ITEM_ID(+)
AND BKMAP_CONTRACT_LINE.PARENT_LINE_ID = SHIP.CONTRACT_LINE_ID(+)
AND SHIP.SHIP_TO_SITE_USE_ID = BKMAP_CUSTOMER_SITE.SITE_USE_ID(+)
AND BKMAP_CONTRACT_LINE.PARENT_LINE_ID IS NOT NULL
AND BKMAP_ORG_TO_GEO_XREF.SERVICE_GEO_ID = 'US'
AND (BKMAP_CONTRACT_HEADER.SCS_CODE = 'WARRANTY' OR
(BKMAP_CONTRACT_HEADER.STS_CODE IN ('ACTIVE', 'EXPIRED',
'HOLD',
'QA_HOLD', 'TERMINATED')
AND BKMAP_CONTRACT_HEADER.SCS_CODE = 'SERVICE'));

thanks
Craig

I would not expect it to be the same for each FTS. The cost is based on
estimated selectivity - not number of total rows in the table.

If this thing takes a long time to run, you might try re-writing this
using explicit JOIN syntax and appropriate indexing to support those
request.


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.