SQL with BIND_EQUIV_FAILURE repeatedly creates same range over and over again

  • From: Martin Klier - Performing Databases GmbH <martin.klier@xxxxxxxxxxxxxxxxx>
  • To: Oracle-L Freelists <oracle-l@xxxxxxxxxxxxx>
  • Date: Fri, 28 Feb 2020 08:39:45 +0100 (CET)

Re-Post - seems not ot work with attachments. 
SQL with BIND_EQUIV_FAILURE repeatedly creates same range over and over again 


Dear listers, 

I stumbled over an effect today, which I can't explain. Maybe you can help out? 

For SQL ID d9k6c3p56r0zc I observe a growing number of child cursors (>500). 
Reason is BIND_EQUIV_FAILURE/Bind mismatch(33) (except for the first child, 
where I see LOAD_OPTIMIZER_STATS, which does not surprise me.) 

I expect this SQL being a candidate for Extended Cursor Sharing, no discussion, 
the application profits from this adaption in 99.999% of all cases. But 
increasing the cursors up to _cursor_obsolete_threshold increases my parsing 
overhead, which I cannot afford here. 

The selectivity in v$sql_shared_cursor is slightly different every time, but 
"not much". 
In v$sql_cs_selectivity I can see, that we get new child cursors with the same 
cardinality range over and over again. 

So the question is: 
Why does this happen? 

Thank you in advance! 
Martin Klier 





More infos: 

The query is basically, an bit obfuscated: 
SELECT <comma seperated list of all columns of MYVIEW> 
FROM MYVIEW 
WHERE ID = :1 AND (qty - qtyReserved) > :2 AND OtherID = :3 

Needless to say, the view is a very complex join all over a normalized schema 
plus inline queries making up view columns. 



See attached a CSV file with the output of 
--------- 
select * 
from v$sql_cs_selectivity 
where sql_id='d9k6c3p56r0zc' 
order by predicate asc, range_id asc, "LOW" asc, "HIGH" asc; 
--------- 
Exctract: 
Child, Predicate, LOW, HIGH: 
1 =1 0 0.000361 0.000442 
8 =1 0 0.000361 0.000442 
20 =1 0 0.000361 0.000442 
19 =1 0 0.000361 0.000442 
18 =1 0 0.000361 0.000442 
17 =1 0 0.000361 0.000442 
16 =1 0 0.000361 0.000442 
15 =1 0 0.000361 0.000442 
14 =1 0 0.000361 0.000442 
13 =1 0 0.000361 0.000442 
12 =1 0 0.000361 0.000442 


Example for the reason in v$sql_shared_cursor: 
<ChildNode><ChildNumber>18</ChildNumber><ID>39</ID><reason>Bind 
mismatch(33)</reason><size>1x4</size><selectivity>1061987324</selectivity></ChildNode>
 
<ChildNode><ChildNumber>19</ChildNumber><ID>39</ID><reason>Bind 
mismatch(33)</reason><size>1x4</size><selectivity>1058633042</selectivity></ChildNode>
 
<ChildNode><ChildNumber>20</ChildNumber><ID>39</ID><reason>Bind 
mismatch(33)</reason><size>1x4</size><selectivity>1059681618</selectivity></ChildNode>
 
(All of them in the other attachment) 


DB Version: RU Database Release Update : 19.6.0.0.200114 (30557433), recently 
upgraded from 11.2.0.4 
DB Architecture: Non-Multitenant 
OS Platform: Oracle Linux. 


-- 
Martin Klier // Performing Databases GmbH 
Managing Partner // Senior DB Consultant 
Oracle ACE Director 

martin.klier@xxxxxxxxxxxxxxxxx // https://www.performing-databases.com ;

Other related posts: