ADAPTIVE TRAFFIC SIGNAL CONTROL SYSTEM (ACS-LITE) FOR WOLF …
Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans
description
Transcript of Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans
![Page 1: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/1.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.1
![Page 2: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/2.jpg)
Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal PlansCarlos SierraConsulting Technical Advisor
![Page 3: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/3.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.3
Carlos Sierra
SQL Tuner handyman: developer, advisor, trainer, support IT: Oracle(17), UNISYS(12), Ford(3), others(3) Florida(17), Venezuela(3), Puerto Rico(6), Michigan(1), Mexico(X) Tools: SQLTXPLAIN(SQLT), SQLHC, TRCANLZR(TRCA), others Motto: Life is good!
Oracle Server Technologies(ST) Center of Expertise(CoE)
![Page 4: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/4.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.4
Adaptive Cursor Sharing (ACS)
Motivation Mechanics Test Case Demo Remarks
![Page 5: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/5.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.5
ACS Motivation
![Page 6: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/6.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.6
SQL Processing
Hard parse side effects– CPU consumption– Latch contention
Excessive hard parsing – Affects concurrency– Restricts scalability
Mitigating hard parsing– Cursor sharing
Hard parsing is expensive!
![Page 7: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/7.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.7
Implementing Cursor SharingReplacing literals with bind variables
![Page 8: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/8.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.8
Before Bind Peeking
Predicate– WHERE channel_id = :b1
Unknowns– Is :b1 between low and high values of channel_id?– Is :b1 a popular value of channel_id?– Are there any rows with value :b1 for channel_id?
Penalty– Possible suboptimal plans
Before 9i CBO was blind to values passed
![Page 9: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/9.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.9
With Bind Peeking
Predicate– WHERE channel_id = :b1
Plan is determined by peeked values– EXEC :b1 := 9;
Optimal plan for 1st execution– CBO can use low/high and histograms on channel_id
Penalty– Possible suboptimal plans for subsequent executions on skewed data
9i offers a partial solution
![Page 10: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/10.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.10
With Adaptive Cursor Sharing
Some queries are ACS candidates Sophisticated non-persistent mechanism Selectivity of predicates determine plan Multiple optimal plans for a query!
– If ACS is successfully applied Penalty
– Marginal increase in CPU and memory overhead
11g improves cursor sharing
![Page 11: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/11.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.11
ACS Mechanics
![Page 12: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/12.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.12
ACS high-level OverviewHigh level overview
If SQL with binds meets some requirements – Flag cursor as bind sensitive– Start monitoring data volume manipulated by cursor
If bind sensitive and data volume manipulated by cursor varies significantly
– Flag cursor as bind aware– Start generating multiple optimal plans for this query on next hard parse
If bind aware then use selectivity of predicates to decide on plan
![Page 13: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/13.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.13
Bind Sensitive
SQL has explicit binds – Or literals and cursor_sharing is “force”
Predicate: column + operand + bind_variable– Equality operand “=“ and histogram on column
Ex: channel_id = :b1– Non-equality operand (range) regardless of histogram on column
“>”, “>=“, “<“, ‘<=“, BETWEEN, LIKE
Minimum requirements
![Page 14: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/14.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.14
Bind Aware
Significant changes in data volume manipulated by cursor– A few rows versus a few thousands of rows– A few thousands of rows versus a few millions of rows
Specifying /*+ BIND_AWARE */ CBO Hint– Bypasses the monitoring phase on data volume
How to become bind aware?
![Page 15: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/15.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.15
Plan Selection
Evaluate selectivity of predicates at soft parse Compare to a non-persistent selectivity profile If within ranges of a known profile then select associated plan Else hard parse
– Compute and execute newly generated plan– Create selectivity profile for new plan or update profile of existing plan
If ranges on selectivity profiles overlap then merge profiles
Based on selectivity profile of predicates
![Page 16: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/16.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.16
V$ dynamic views for ACS
V$SQL– Shareable, bind sensitive and bind aware flags
V$SQL_CS_STATISTICS– Data volume manipulated (rows processed)
V$SQL_CS_HISTOGRAM– Record keeping of data volume per execution (small, medium, large)
V$SQL_CS_SELECTIVITY– Predicates selectivity profiles
ACS non-persistent performance views
![Page 17: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/17.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.17
ACS Test Case
![Page 18: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/18.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.18
Our Query with LiteralsGuesstimate execution plan then verify it with demo 0
![Page 19: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/19.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.19
Possible Access Paths?
![Page 20: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/20.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.20
Optimal Execution Plan
![Page 21: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/21.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.21
Our Query with Bind VariablesHow many optimal execution plans can you foresee?
![Page 22: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/22.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.22
Multiple Optimal Plans for one QueryGuesstimate optimal plan (access paths) for each query
Query :b1 :b2 AP1 AP2q1 9 33 N1 N2
q2 5 32
q3 2 999
q4 9 999
q5 2 33
![Page 23: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/23.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.23
Multiple Optimal Plans for one QueryGuesstimate optimal plan (access paths) for each query
Query :b1 :b2 AP1 AP2q1 9 33 N1 N2
q2 5 32 N1 N2
q3 2 999 FTS FTS
q4 9 999 N1 FTS
q5 2 33 FTS N2
![Page 24: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/24.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.24
Multiple Optimal Plans for one QueryExecute demos 1-5 and verify access paths
Query :b1 :b2 AP1 AP2q1 9 33 N1 N2q2 5 32 N1 N2q3 2 999 FTS FTSq4 9 999 N1 FTSq5 2 33 FTS N2
![Page 25: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/25.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.25
Bind Sensitive: Rows Processed
Data volume manipulated– Fuzzy representation– S: few rows– M: thousands or rows– L: millions of rows
v$sql_cs_histogram– Bucket(0): S– Bucket(1): M– Bucket(2): L
Monitor v$sql_cs_statistics.rows_processed
Query :b1 :b2 OptimalRows
Processedq1 9 33 N1/N2 37,382
q2 5 32 N1/N2 2
q3 2 999 FTS/FTS 8,021,324
q4 9 999 N1/FTS 6,233,815
q5 2 33 FTS/N2 1,825,131
![Page 26: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/26.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.26
ACS Demo
![Page 27: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/27.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.27
Demo 6: When Cursor becomes Bind Aware?
Query :b1 :b2 OptimalRows
Processed Bucket Aware Child Actualq1 9 33 N1/N2 37,382
q2 5 32 N1/N2 2
q3 2 999 FTS/FTS 8,021,324
q4 9 999 N1/FTS 6,233,815
q5 2 33 FTS/N2 1,825,131
Obtain rows processed from demo 1-5 then guesstimate aware flag
![Page 28: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/28.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.28
Demo 6: When Cursor becomes Bind Aware?
Query :b1 :b2 OptimalRows
Processed Bucket Aware Child Actualq1 9 33 N1/N2 37,382 1
q2 5 32 N1/N2 2 0
q3 2 999 FTS/FTS 8,021,324 2
q4 9 999 N1/FTS 6,233,815 2
q5 2 33 FTS/N2 1,825,131 2
Obtain rows processed from demo 1-5 then guesstimate aware flag
![Page 29: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/29.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.29
Demo 6: When Cursor becomes Bind Aware?
Query :b1 :b2 OptimalRows
Processed Bucket Aware Child Actualq1 9 33 N1/N2 37,382 1 N
q2 5 32 N1/N2 2 0 N
q3 2 999 FTS/FTS 8,021,324 2 Y
q4 9 999 N1/FTS 6,233,815 2 Y
q5 2 33 FTS/N2 1,825,131 2 Y
Obtain rows processed from demo 1-5 then guesstimate aware flag
![Page 30: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/30.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.30
Demo 6: When Cursor becomes Bind Aware?
Query :b1 :b2 OptimalRows
Processed Bucket Aware Child Actualq1 9 33 N1/N2 37,382 1 N 0 N1/N2
q2 5 32 N1/N2 2 0 N 0 N1/N2
q3 2 999 FTS/FTS 8,021,324 2 Y 1 FTS/FTS
q4 9 999 N1/FTS 6,233,815 2 Y 2 N1/FTS
q5 2 33 FTS/N2 1,825,131 2 Y 3 FTS/N2
Obtain rows processed from demo 1-5 then guesstimate aware flag
![Page 31: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/31.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.31
Demo 6: When Cursor becomes Bind Aware?
Query :b1 :b2 OptimalRows
Processed Bucket Aware Child Actualq1 9 33 N1/N2 37,382 1 N 0 N1/N2
q2 5 32 N1/N2 2 0 N 0 N1/N2
q3 2 999 FTS/FTS 8,021,324 2 Y 1 FTS/FTS
q4 9 999 N1/FTS 6,233,815 2 Y 2 N1/FTS
q5 2 33 FTS/N2 1,825,131 2 Y 3 FTS/N2
Obtain rows processed from demo 1-5 then guesstimate aware flag
![Page 32: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/32.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.32
Demo 7: When Cursor becomes Bind Aware?
Query :b1 :b2 OptimalRows
Processed Bucket Aware Child Actualq5 2 33 FTS/N2 1,825,131
q4 9 999 N1/FTS 6,233,815
q3 2 999 FTS/FTS 8,021,324
q2 5 32 N1/N2 2
q1 9 33 N1/N2 37,382
Compute bucket and guesstimate aware flag and actual plan
![Page 33: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/33.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.33
Demo 7: When Cursor becomes Bind Aware?
Query :b1 :b2 OptimalRows
Processed Bucket Aware Child Actualq5 2 33 FTS/N2 1,825,131 2
q4 9 999 N1/FTS 6,233,815 2
q3 2 999 FTS/FTS 8,021,324 2
q2 5 32 N1/N2 2 0
q1 9 33 N1/N2 37,382 1
Compute bucket and guesstimate aware flag and actual plan
![Page 34: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/34.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.34
Demo 7: When Cursor becomes Bind Aware?
Query :b1 :b2 OptimalRows
Processed Bucket Aware Child Actualq5 2 33 FTS/N2 1,825,131 2 N
q4 9 999 N1/FTS 6,233,815 2 N
q3 2 999 FTS/FTS 8,021,324 2 N
q2 5 32 N1/N2 2 0 N
q1 9 33 N1/N2 37,382 1 Y
Compute bucket and guesstimate aware flag and actual plan
![Page 35: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/35.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.35
Demo 7: When Cursor becomes Bind Aware?
Query :b1 :b2 OptimalRows
Processed Bucket Aware Child Actualq5 2 33 FTS/N2 1,825,131 2 N 0 FTS/N2
q4 9 999 N1/FTS 6,233,815 2 N 0 FTS/N2
q3 2 999 FTS/FTS 8,021,324 2 N 0 FTS/N2
q2 5 32 N1/N2 2 0 N 0 FTS/N2
q1 9 33 N1/N2 37,382 1 Y 1 N1/N2
Compute bucket and guesstimate aware flag and actual plan
![Page 36: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/36.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.36
Demo 7: When Cursor becomes Bind Aware?
Query :b1 :b2 OptimalRows
Processed Bucket Aware Child Actualq5 2 33 FTS/N2 1,825,131 2 N 0 FTS/N2
q4 9 999 N1/FTS 6,233,815 2 N 0 FTS/N2
q3 2 999 FTS/FTS 8,021,324 2 N 0 FTS/N2
q2 5 32 N1/N2 2 0 N 0 FTS/N2
q1 9 33 N1/N2 37,382 1 Y 1 N1/N2
Compute bucket and guesstimate aware flag and actual plan
![Page 37: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/37.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.37
Demo 8: When Cursor becomes Bind Aware?
Query :b1 :b2 OptimalRows
Processed Bucket Aware Child Actualq5 2 33 FTS/N2 1,825,131 2
q4 9 999 N1/FTS 6,233,815 2
q3 2 999 FTS/FTS 8,021,324 2
q1 9 33 N1/N2 37,382 1
q2 5 32 N1/N2 2 0
Guesstimate aware flag and actual plan
![Page 38: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/38.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.38
Demo 8: When Cursor becomes Bind Aware?
Query :b1 :b2 OptimalRows
Processed Bucket Aware Child Actualq5 2 33 FTS/N2 1,825,131 2 N
q4 9 999 N1/FTS 6,233,815 2 N
q3 2 999 FTS/FTS 8,021,324 2 N
q1 9 33 N1/N2 37,382 1 N
q2 5 32 N1/N2 2 0 N
Guesstimate aware flag and actual plan
![Page 39: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/39.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.39
Demo 8: When Cursor becomes Bind Aware?
Query :b1 :b2 OptimalRows
Processed Bucket Aware Child Actualq5 2 33 FTS/N2 1,825,131 2 N 0 FTS/N2
q4 9 999 N1/FTS 6,233,815 2 N 0 FTS/N2
q3 2 999 FTS/FTS 8,021,324 2 N 0 FTS/N2
q1 9 33 N1/N2 37,382 1 N 0 FTS/N2
q2 5 32 N1/N2 2 0 N 0 FTS/N2
Guesstimate aware flag and actual plan
![Page 40: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/40.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.40
Demo 8: When Cursor becomes Bind Aware?
Query :b1 :b2 OptimalRows
Processed Bucket Aware Child Actualq5 2 33 FTS/N2 1,825,131 2 N 0 FTS/N2
q4 9 999 N1/FTS 6,233,815 2 N 0 FTS/N2
q3 2 999 FTS/FTS 8,021,324 2 N 0 FTS/N2
q1 9 33 N1/N2 37,382 1 N 0 FTS/N2
q2 5 32 N1/N2 2 0 N 0 FTS/N2
Guesstimate aware flag and actual plan
![Page 41: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/41.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.41
Closing Remarks
![Page 42: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/42.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.42
Remarks on Bind Sensitivity
Monitor V$SQL_CS_STATISTICS.rows_processed– If small number of rows then
V$SQL_CS_HISTOGRAM.bucket_id(0)++– If medium number of rows then
V$SQL_CS_HISTOGRAM.bucket_id(1)++– If large number of rows then
V$SQL_CS_HISTOGRAM.bucket_id(2)++
Based on experimental observation
![Page 43: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/43.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.43
Remarks on Bind Aware
Some cases where cursor may become bind aware– bucket_id(0) = bucket_id(1) > 0– bucket_id(1) = bucket_id(2) > 0– bucket_id(0) > 0 and bucket_id(2) > 0– /*+ BIND_AWARE */ CBO Hint
Based on experimental observation
![Page 44: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/44.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.44
Understanding Selectivity ProfileFrom demo 6
Query :b1 :b2 Childq3 2 999 1
q4 9 999 2
q5 2 33 3
![Page 45: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/45.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.45
Understanding Selectivity ProfileFrom demo 6
Query :b1 :b2 Childq3 2 999 1
q4 9 999 2
q5 2 33 3
![Page 46: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/46.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.46
Understanding Selectivity ProfileFrom demo 6
Query :b1 :b2 Childq3 2 999 1
q4 9 999 2
q5 2 33 3
![Page 47: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/47.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.47
Conclusions
ACS only applies to a subset of queries with binds ACS requires a ramp-up process (few executions) In some cases cursor may fail to become bind aware To force a cursor become bind aware use CBO Hint ACS is not persistent ACS works well with SQL Plan Management
ACS can produce multiple optimal plans for one query
![Page 48: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/48.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.48
Give Away
Creates a SQL Patch for one SQL_ID Turns “on” EVENT 10053 for SQL_ID Hints on SQL Patch
– GATHER_PLAN_STATISTICS – MONITOR – BIND_AWARE
Instructions how to drop SQL Patch and turn “off” EVENT 10053
Script sqlt/utl/coe_gen_sql_patch.sql (MOS 215187.1)
![Page 49: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/49.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.49
References and Contact Info
https://blogs.oracle.com/optimizer/– Insight into the workings of the Optimizer
Oracle Optimizer Blog
[email protected] http://carlos-sierra.net @csierra_usa
![Page 50: Using Adaptive Cursor Sharing (ACS) to produce multiple Optimal Plans](https://reader036.fdocuments.us/reader036/viewer/2022062410/56816381550346895dd4664d/html5/thumbnails/50.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.50