Re: Hint is not used in SQL
- From: Amit Saroha <eramitsaroha@xxxxxxxxx>
- To: jlewisoracle@xxxxxxxxx
- Date: Wed, 15 Nov 2023 10:51:58 -0500
Hello Jonathan,
My fault I believe I messed it up when taking the tests. I dropped and
reapplied the patch, and I generated the expanded hint report once more.
Because I know we are only changing one row from the front end, the view
must run first, followed by the table.
I'm not sure if VIEW PUSH PREDICATE is causing the leading hint to fail,
but it also didn't work when I used NO PUSH PREDICATE even though it was
used but LEADING was not.
Best Regards,
AMIT
On Wed, Nov 15, 2023 at 10:40 AM Jonathan Lewis <jlewisoracle@xxxxxxxxx>
wrote:
That hint report and patch generation statement aren't consistent with the
previous output.
*3 - SEL$AC90CD92 / PO_LINE_LOCATIONS_ALL@SEL$2 U -
USE_NL_WITH_INDEX(@SEL$AC90CD92 PO_LINE_LOCATIONS_ALL@SEL$2) 5 -
SET$632CC7ED N - LEADING(@SET$632CC7ED VW_NSO_1@SEL$AC90CD92
PO_LINE_LOCATIONS_ALL@SEL$2) *
You have *@SET$632CC7ED* in the leading hint and that should be
*@SEL$AC90CD92. *
For an initial test of the patch I'd also use just use_nl() rather than
use_nl_with_index().
Regards
Jonathan Lewis
declare
v1 varchar2(128);
begin
v1 := dbms_sqldiag.create_sql_patch(
sql_id => '7wh1j104vstdg',
name => '7wh1j104vstdg',
hint_text => 'LEADING(@SEL$AC90CD92
VW_NSO_1@SEL$AC90CD92 PO_LINE_LOCATIONS_ALL@SEL$2)
USE_NL(@SEL$AC90CD92
PO_LINE_LOCATIONS_ALL@SEL$2)');
dbms_output.put_line(v1);
end;
/
SQL_ID 7wh1j104vstdg, child number 0
-------------------------------------
UPDATE PO_LINE_LOCATIONS POLL SET POLL.SECONDARY_QUANTITY_CANCELLED =
(SELECT INV_CONVERT.INV_UM_CONVERT( ITEM_ID => POL.ITEM_ID, PRECISION
=> NULL, FROM_QUANTITY => POLL.QUANTITY_CANCELLED, FROM_UNIT => NULL,
TO_UNIT => NULL, FROM_NAME => POLL.UNIT_MEAS_LOOKUP_CODE , TO_NAME =>
POLL.SECONDARY_UNIT_OF_MEASURE ) FROM PO_LINES POL WHERE POL.PO_LINE_ID
= POLL.PO_LINE_ID) WHERE NVL(POLL.CANCEL_FLAG, 'N') = 'I' AND
NVL(POLL.CLOSED_CODE, 'OPEN') <> 'FINALLY CLOSED' AND
POLL.SECONDARY_UNIT_OF_MEASURE IS NOT NULL AND POLL.LINE_LOCATION_ID IN
( SELECT LINE_LOCATION_ID FROM PO_LINE_LOCATIONS WHERE LINE_LOCATION_ID
= :B3 AND :B2 = :B1 UNION ALL SELECT LINE_LOCATION_ID FROM
PO_LINE_LOCATIONS WHERE PO_LINE_ID = :B3 AND :B2 = :B4 UNION ALL SELECT
LINE_LOCATION_ID FROM PO_LINE_LOCATIONS WHERE PO_HEADER_ID = :B3 AND
:B7 <> :B6 AND :B2 = :B5 UNION ALL SELECT LINE_LOCATION_ID FROM
PO_LINE_LOCATIONS WHERE PO_RELEASE_ID = :B3 AND :B7 = :B6 AND :B2 = :B5
)
Plan hash value: 3125101625
-------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name |
Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | |
| | 80198 (100)| |
| 1 | UPDATE | PO_LINE_LOCATIONS_ALL |
| | | |
| 2 | NESTED LOOPS | |
1 | 67 | 80191 (8)| 00:00:04 |
|* 3 | TABLE ACCESS FULL | PO_LINE_LOCATIONS_ALL |
1 | 61 | 80181 (8)| 00:00:04 |
| 4 | VIEW | VW_NSO_1 |
1 | 6 | 10 (0)| 00:00:01 |
| 5 | SORT UNIQUE | |
4 | 65 | 10 (0)| 00:00:01 |
| 6 | UNION ALL PUSHED PREDICATE | |
| | | |
|* 7 | FILTER | |
| | | |
|* 8 | TABLE ACCESS BY INDEX ROWID | PO_LINE_LOCATIONS_ALL |
1 | 10 | 3 (0)| 00:00:01 |
|* 9 | INDEX UNIQUE SCAN | PO_LINE_LOCATIONS_U1 |
1 | | 2 (0)| 00:00:01 |
|* 10 | FILTER | |
| | | |
|* 11 | TABLE ACCESS BY INDEX ROWID | PO_LINE_LOCATIONS_ALL |
1 | 16 | 3 (0)| 00:00:01 |
|* 12 | INDEX UNIQUE SCAN | PO_LINE_LOCATIONS_U1 |
1 | | 2 (0)| 00:00:01 |
|* 13 | FILTER | |
| | | |
|* 14 | TABLE ACCESS BY INDEX ROWID | PO_LINE_LOCATIONS_ALL |
1 | 16 | 3 (0)| 00:00:01 |
|* 15 | INDEX UNIQUE SCAN | PO_LINE_LOCATIONS_U1 |
1 | | 2 (0)| 00:00:01 |
|* 16 | FILTER | |
| | | |
|* 17 | TABLE ACCESS BY INDEX ROWID BATCHED| PO_LINE_LOCATIONS_ALL |
1 | 23 | 1 (0)| 00:00:01 |
|* 18 | INDEX RANGE SCAN | PO_LINE_LOCATIONS_N5 |
1 | | 1 (0)| 00:00:01 |
|* 19 | TABLE ACCESS BY INDEX ROWID | PO_LINES_ALL |
1 | 16 | 3 (0)| 00:00:01 |
|* 20 | INDEX UNIQUE SCAN | PO_LINES_U1 |
1 | | 2 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - filter(("SECONDARY_UNIT_OF_MEASURE" IS NOT NULL AND
NVL("CANCEL_FLAG",'N')='I' AND
"ORG_ID"=TO_NUMBER(SYS_CONTEXT('multi_org2','current_org_id'))
AND NVL("CLOSED_CODE",'OPEN')<>'FINALLY
CLOSED'))
7 - filter(("LINE_LOCATION_ID"=:B3 AND :B2=:B1))
8 - filter("ORG_ID"=TO_NUMBER(SYS_CONTEXT('multi_org2','current_org_id')))
9 - access("LINE_LOCATION_ID"=:B3)
10 - filter(:B2=:B4)
11 - filter(("PO_LINE_ID"=:B3 AND
"ORG_ID"=TO_NUMBER(SYS_CONTEXT('multi_org2','current_org_id'))))
12 - access("LINE_LOCATION_ID"="LINE_LOCATION_ID")
13 - filter((:B7<>:B6 AND :B2=:B5))
14 - filter(("PO_HEADER_ID"=:B3 AND
"ORG_ID"=TO_NUMBER(SYS_CONTEXT('multi_org2','current_org_id'))))
15 - access("LINE_LOCATION_ID"="LINE_LOCATION_ID")
16 - filter((:B2=:B5 AND :B7=:B6))
17 - filter(("LINE_LOCATION_ID"="LINE_LOCATION_ID" AND
"ORG_ID"=TO_NUMBER(SYS_CONTEXT('multi_org2','current_org_id'))))
18 - access("PO_RELEASE_ID"=:B3)
19 - filter("ORG_ID"=TO_NUMBER(SYS_CONTEXT('multi_org2','current_org_id')))
20 - access("PO_LINE_ID"=:B1)
Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 2 (U - Unused (2))
---------------------------------------------------------------------------
1 - SEL$AC90CD92
U - LEADING(@SEL$AC90CD92 VW_NSO_1@SEL$AC90CD92
PO_LINE_LOCATIONS_ALL@SEL$2)
3 - SEL$AC90CD92 / PO_LINE_LOCATIONS_ALL@SEL$2
U - USE_NL(@SEL$AC90CD92 PO_LINE_LOCATIONS_ALL@SEL$2)
Note
-----
- SQL patch "7wh1j104vstdg" used for this statement
82 rows selected.
Other related posts: