SlideShare a Scribd company logo
SAGE Computing Services
Customised Oracle Training Workshops and ConsultingCustomised Oracle Training Workshops and Consulting
Bind Peeking – The Endless Tuning Nightmare
Penny Cookson
Managing Director and Principal Consultant
Working with Oracle products since 1987
Oracle Magazine Educator of the Year 2004
Oracle ACE
www.sagecomputing.com.au
penny@sagecomputing.com.au
Characteristics
I haven’t changed anything
Its really slow this morning
I did the same thing yesterday and it was fine
Actually its OK nowy
No its not
Thank you so much you’ve fixed it (I haven’t done anything)y y ( y g)
Oracle Version < 9
SELECT COUNT(l quantity) FROM
Shared Pool
SELECT COUNT(l.quantity)
SELECT COUNT(l.quantity) FROM
bookings_skew l WHERE
resource_code = :v1;
FROM bookings_skew_large l
WHERE resource_code = :v1;
FULL SCAN
How many
rows do I
expect?
‘BRLG’
FULL SCAN
‘PC1’‘PC1’
<Version 9 database
N bi d kiNo bind peeking
Oracle Version < 9
SELECT COUNT(l quantity) FROM
Shared Pool
SELECT COUNT(l.quantity)
SELECT COUNT(l.quantity) FROM
bookings_skew l WHERE
resource_code = :v1;
FROM bookings_skew l
WHERE resource_code = :v1;
FULL SCAN
How many
rows do I
expect?
‘PC1’
FULL SCAN
‘BRLG’‘BRLG’
<Version 9 database
N bi d kiNo bind peeking
What is Bind Peeking?g
SELECT COUNT(l quantity) FROM
Shared Pool
SELECT COUNT(l.quantity)
SELECT COUNT(l.quantity) FROM
bookings_skew l WHERE
resource_code = :v1;
FROM bookings_skew l
WHERE resource_code = :v1;
FULL SCAN
How many
rows do I
expect?
‘BRLG’
FULL SCAN
‘PC1’‘PC1’
>=Version 9 database
Bi d kiBind peeking
What is Bind Peeking?g
SELECT COUNT(l quantity) FROM
Shared Pool
SELECT COUNT(l.quantity)
SELECT COUNT(l.quantity) FROM
bookings_skew l WHERE
resource_code = :v1;
FROM bookings_skew l
WHERE resource_code = :v1;
INDEXED
ACCESS
How many
rows do I
expect?
‘PC1’
ACCESS
‘ G‘BRLG’
>=Version 9 database
Bi d kiBind peeking
No Histogramg
***************************************
SINGLE TABLE ACCESS PATHSINGLE TABLE ACCESS PATH
Column (#3): RESOURCE_CODE(VARCHAR2)
AvgLen: 5.00 NDV: 9 Nulls: 0 Density: 0.11111
Table: BOOKINGS SKEW Alias: L
5527238/9 = 614138
Table: BOOKINGS_SKEW Alias: L
Card: Original: 5527238 Rounded: 614138 Computed: 614137.56 Non
Adjusted: 614137.56
Access Path: TableScanAccess Path: TableScan
Cost: 7701.80 Resp: 7701.80 Degree: 0
Cost_io: 7426.00 Cost_cpu: 1605072831
Resp io: 7426.00 Resp cpu: 1605072831p_ p_ p
Access Path: index (AllEqRange)
Index: BK_RESSKEW
resc_io: 32580.00 resc_cpu: 509053165
ix_sel: 0.11111 ix_sel_with_filters: 0.11111
Cost: 32667.47 Resp: 32667.47 Degree: 1
Best:: AccessPath: TableScan
Cost: 7701.80 Degree: 1 Resp: 7701.80 Card: 614137.56 Bytes: 0
***************************************
Histogram – Majority Firstg j y
***************************************
SINGLE TABLE ACCESS PATH
Column (#3): RESOURCE_CODE(VARCHAR2)
AvgLen: 5.00 NDV: 9 Nulls: 0 Density: 9.0892e-008
Histogram: Freq #Bkts: 9 UncompBkts: 5966 EndPtVals: 9
Table: BOOKINGS_SKEW Alias: L
Card: Original: 5464800 Rounded: 1727558 Computed: 1727558.30 Non
Adjusted: 1727558.30
A P th T bl SAccess Path: TableScan
Cost: 7710.70 Resp: 7710.70 Degree: 0
Cost_io: 7426.00 Cost_cpu: 1656892911
Resp io: 7426 00 Resp cpu: 1656892911
RESO COUNT(*)
---- ----------
VCR1 495711
CONF 495720
LNCH 743576Resp_io: 7426.00 Resp_cpu: 1656892911
Access Path: index (AllEqRange)
Index: BK_RESSKEW
resc io: 94139 00 resc cpu: 1468544140
LNCH 743576
BRSM 743583
PC1 47858
FLPC 495720
BRLG 1739277
resc_io: 94139.00 resc_cpu: 1468544140
ix_sel: 0.31612 ix_sel_with_filters: 0.31612
Cost: 94391.34 Resp: 94391.34 Degree: 1
Best:: AccessPath: TableScan
TAP1 247864
VCR2 495715
Best:: AccessPath: TableScan
Cost: 7710.70 Degree: 1 Resp: 7710.70 Card: 1727558.30 Bytes: 0
***************************************
Histogram – Minority Firstg y
***************************************
SINGLE TABLE ACCESS PATH
Column (#3): RESOURCE_CODE(VARCHAR2)
AvgLen: 5.00 NDV: 9 Nulls: 0 Density: 9.0892e-008
Histogram: Freq #Bkts: 9 UncompBkts: 5966 EndPtVals: 9
Table: BOOKINGS_SKEW Alias: L
Card: Original: 5464800 Rounded: 43968 Computed: 43967.55 Non
Adjusted: 43967.55
A P th T bl SAccess Path: TableScan
Cost: 7693.35 Resp: 7693.35 Degree: 0
Cost_io: 7426.00 Cost_cpu: 1555877511
Resp io: 7426 00 Resp cpu: 1555877511
RESO COUNT(*)
---- ----------
VCR1 495711
CONF 495720
Resp_io: 7426.00 Resp_cpu: 1555877511
Access Path: index (AllEqRange)
Index: BK_RESSKEW
resc io: 2399 00 resc cpu: 37397785
LNCH 743576
BRSM 743583
PC1 47858
FLPC 495720
BRLG 1739277resc_io: 2399.00 resc_cpu: 37397785
ix_sel: 0.0080456 ix_sel_with_filters: 0.0080456
Cost: 2405.43 Resp: 2405.43 Degree: 1
Best:: AccessPath: IndexRange Index: BK RESSKEW
BRLG 1739277
TAP1 247864
VCR2 495715
Best:: AccessPath: IndexRange Index: BK_RESSKEW
Cost: 2405.43 Degree: 1 Resp: 2405.43 Card: 43967.55 Bytes: 0
***************************************
What is the CBO OK at
Data Condition Literal/Bind Var Histogramg
Even Distribution Equality Literal N/A
Even Distribution Equality Bind N/A
Skewed Equality Literal NO
Skewed Equality Literal YESSkewed Equality Literal YES
Skewed Equality Bind NO
Skewed Equality Bind YES
Histogramsg
V i < 9 Hi t ith bi d i blVersions < 9: Histograms are no use with bind variables
Versions >= 9: Histograms are worse than no useVersions > 9: Histograms are worse than no use
with bind variables
Each distinct SQL uses only either minority or majority
Unless…
values but not both
Or you don’t keep/use the statements in the shared pool
(in which case you might as well use literals)( y g )
So if I have no Skewed Data I am OK?
Data Condition Literal/Bind Var Histogramg
Even Distribution Equality Literal N/A
Even Distribution Equality Bind N/A
Skewed Equality Literal NO
Skewed Equality Literal YESSkewed Equality Literal YES
Skewed Equality Bind NO
Skewed Equality Bind YES
Minority Range Firsty g
********************************************************************************
SINGLE TABLE ACCESS PATHSINGLE TABLE ACCESS PATH
Column (#2): EVENT_NO(NUMBER)
AvgLen: 5.00 NDV: 99178 Nulls: 0 Density: 1.0083e-005 Min: 211 Max: 100175
Table: BOOKINGS EVEN Alias: LTable: BOOKINGS_EVEN Alias: L
Card: Original: 5522697 Rounded: 4973 Computed: 4972.66 Non Adjusted:
4972.66
Access Path: TableScanAccess Path: TableScan
Cost: 7742.79 Resp: 7742.79 Degree: 0
Cost_io: 7492.00 Cost_cpu: 1459499283
Resp io: 7492.00 Resp cpu: 1459499283
MIN MAX
------ ------
100 100200p_ p_ p
Access Path: index (RangeScan)
Index: BK_EVTEVEN
resc_io: 4992.00 resc_cpu: 37790328
ix_sel: 9.0040e-004 ix_sel_with_filters: 9.0040e-004
Cost: 4998.49 Resp: 4998.49 Degree: 1
Best:: AccessPath: IndexRange Index: BK_EVTEVEN
Cost: 4998.49 Degree: 1 Resp: 4998.49 Card: 4972.66 Bytes: 0
******************************************************************************
So if I have no Skewed Data I am OK?
Data Condition Literal/Bind Var Histogramg
Even Distribution Equality Literal N/A
Even Distribution Equality Bind N/A
Skewed Equality Literal NO
Skewed Equality Literal YESSkewed Equality Literal YES
Skewed Equality Bind NO
Skewed Equality Bind YES
Even Distribution Range Bind N/A
Partitions?
Which statistics shall we use?
Resource code
Resource_code
has 1 value
Partition
empty _
has approx
5600 values
has 1 valueempty
<100 <200 <300 <400 <500
Global statistics resource_code has 6116 values
What Can We do?
Own code:-
Use Literals – but only for skewed data
Write separate code for minority/majority
Give user separate menu options
Daily report v Annual report
Build sql dynamically with hints for various cases
User not aware
(and keep your histograms)
What Can We do?
Package:-
If we have no histogram what is it doing? Full scan
Is a full scan acceptable? Yes
No histogram
Turn off bind peeking
_optim_peek_user_binds=false_ p _p _ _
Is a full scan acceptable? Nop
Run the majority ones first
Different session for majority/minority cases and change
session variables
What Can We do?
Package:-
If we have no histogram what is it doing? Index scan
(So none of these will help
No histogram
Turn off bind peekingp g
_optim_peek_user_binds=false)
Remove index?
Create an outline and force a full scan
Run the majority ones first
Different session for majority/minority cases and change
session variables
What Can We do?
Package:-
Purge the statement from the shared pool each
execution (10.2.0.4) :
dbms_shared_pool.purge
('&address, &hash_value','c')( _ )
Oracle 11g - Datag
RESO NUM
---- ----------
VCR1 524288
LNCH 786432LNCH 786432
CONF 524288
BRSM 786432BOOKINGS_EVEN
PC1 262144
FLPC 524288
BRLG 1310720
TAP1 262144
VCR2 524288VCR2 524288
----------
sum 5505024
Oracle 11g - Datag
RESO NUM
---- ----------
RESO NUM
---- ----------
PC2 99
PC3 99
PC4 99
PC1 47865
TAP1 247853
FLPC 495713
PC5 99
PC6 99
PC7 99
PC8 99
BOOKINGS_SKEW
CONF 495714
VCR2 495718
VCR1 495720
PC8 99
PC9 99
PC11 101
PC12 102
BRSM 743571
LNCH 743581
BRLG 1737243
----------
PC13 103
PC14 104
PC15 199
sum 5505024
PC16 399
PC17 799
PC18 999
PC19 1999PC19 1999
PC20 3999
PC10 199
Bind Peeking + Adaptive Cursors Summary
Statements with bind variables (+histograms) are bind
itisensitive
The first time you execute a statement with different selectivity
it uses the original plan
The second time it changes the plan and become bind awareThe second time it changes the plan and become bind aware
New values will use a plan for the appropriate selectivity range
Be careful when statements become invalidated by:-
Gathering statistics
Flushing the shared pool
Restarting the database
Or when they are aged out
Adaptive Cursors Functionality
Adaptive Cursors 11 1 0 6Adaptive Cursors 11.1.0.6
Bind variable with Equality and Histogram
Not for range conditionsNot for range conditions
Adaptive Cursors 11.1.0.7
Bind variable with Equality and HistogramBind variable with Equality and Histogram
Range conditions
Do Not Support LIKEDo Not Support LIKE
Future?
LIKELIKE
SELECT /*+ HINT TO MAKE IT BIND AWARE */
Gathering Statisticsg
E l CBO “M k th t ti ti l l ”Early CBO: “Make sure you gather statistics regularly”
Later CBO: “Don’t gather statistics unless data patterns
change”change
BUT
If you have new majority values you need to recreate the
histogram
SQL Plan Management
Manual capture
DBMS_SPM.LOAD_PLANS_FROM_SQLSET
DBMS SPM.LOAD PLANS FROM CURSOR CACHE
Auto capture of repeatable statements
OPTIMIZER_CAPTURE_SQL_PLAN_BASELINE = TRUE
DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE
B li
SQL Management Base
M l l d/ t f l Baseline =
(Stored and Accepted plans)
Manual load/accept of new plan
DBMS_SPM.LOAD_PLANS_FROM_SQLSET
DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE
SQL Tuning Advisor identifies new
plan SQL*Profile accepted
Auto accept of new plan
(if it performs better)
N Pl
plan – SQL Profile accepted (if it performs better)
DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE
New Plan
identified during
execution
Stored not accepted
SQL Plan Management – Binds
• Will not automatically handle adaptive cursors
• New plan identified on first execution• New plan identified on first execution
• New plan recorded as not accepted
• Plan will not evolve
• All bind variable values use same baseline plan
• Plans show as not bind sensitive or aware
SQL Plan Management – Binds
SQL Plan Management – Binds
SQL Plan Management – Binds
Force Acceptance of the plan
SAGE Computing Services
Customised Oracle Training Workshops and ConsultingCustomised Oracle Training Workshops and Consulting
Questions?
tiwww.sagecomputing.com.au
penny@sagecomputing.com.au

More Related Content

PDF
Explain this!
PPT
11 Things About11g
PDF
A deep dive about VIP,HAIP, and SCAN
PDF
PostgreSQL Portland Performance Practice Project - Database Test 2 Tuning
PDF
pstack, truss etc to understand deeper issues in Oracle database
PDF
Strategic autovacuum
PDF
Mysql56 replication
KEY
Varnish @ Velocity Ignite
Explain this!
11 Things About11g
A deep dive about VIP,HAIP, and SCAN
PostgreSQL Portland Performance Practice Project - Database Test 2 Tuning
pstack, truss etc to understand deeper issues in Oracle database
Strategic autovacuum
Mysql56 replication
Varnish @ Velocity Ignite

What's hot (19)

PPTX
OpenWorld Sep14 12c for_developers
PPT
Oracle 10g Performance: chapter 00 sampling
PDF
Demystifying cost based optimization
PDF
PostgreSQL Procedural Languages: Tips, Tricks and Gotchas
PDF
Survey of Percona Toolkit
PDF
Redo internals ppt
PDF
Deep review of LMS process
PDF
Px execution in rac
PDF
A close encounter_with_real_world_and_odd_perf_issues
PDF
Rac 12c optimization
PDF
MySQL SQL Tutorial
PDF
Performance tuning a quick intoduction
PDF
Riyaj real world performance issues rac focus
PDF
Aplicações 10x a 100x mais rápida com o postgre sql
PDF
New Tuning Features in Oracle 11g - How to make your database as boring as po...
PDF
oracle cloud with 2 nodes processing
PDF
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~
PDF
Deep dive into PostgreSQL statistics.
PDF
MySQL/MariaDB query optimizer tuning tutorial from Percona Live 2013
OpenWorld Sep14 12c for_developers
Oracle 10g Performance: chapter 00 sampling
Demystifying cost based optimization
PostgreSQL Procedural Languages: Tips, Tricks and Gotchas
Survey of Percona Toolkit
Redo internals ppt
Deep review of LMS process
Px execution in rac
A close encounter_with_real_world_and_odd_perf_issues
Rac 12c optimization
MySQL SQL Tutorial
Performance tuning a quick intoduction
Riyaj real world performance issues rac focus
Aplicações 10x a 100x mais rápida com o postgre sql
New Tuning Features in Oracle 11g - How to make your database as boring as po...
oracle cloud with 2 nodes processing
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~
Deep dive into PostgreSQL statistics.
MySQL/MariaDB query optimizer tuning tutorial from Percona Live 2013
Ad

Viewers also liked (13)

DOC
Web content producer performance appraisal
PDF
Articles and Reviews for December 5, 2012
PPTX
Transformada de laplace
PPT
8min ysbh
PPTX
Social Media Marketing for Sustainable Destinations
PDF
La revolución industrial
PDF
Ecdemy - Powering eBusiness and eCommerce education in India
PDF
Kiril & Jana - Icesream show
PDF
Evan Katz - About Hedge Funds Care
PPTX
Estrategias de marketing para la generación de datos
DOC
sreekumarresumeII
DOC
ใบงานสำรวจตนเอง 1
PDF
Energi
Web content producer performance appraisal
Articles and Reviews for December 5, 2012
Transformada de laplace
8min ysbh
Social Media Marketing for Sustainable Destinations
La revolución industrial
Ecdemy - Powering eBusiness and eCommerce education in India
Kiril & Jana - Icesream show
Evan Katz - About Hedge Funds Care
Estrategias de marketing para la generación de datos
sreekumarresumeII
ใบงานสำรวจตนเอง 1
Energi
Ad

Similar to Bind Peeking - The Endless Tuning Nightmare (20)

PDF
In Memory Database In Action by Tanel Poder and Kerry Osborne
PDF
Oracle Database In-Memory Option in Action
PPTX
Oracle Basics and Architecture
PPTX
The Hidden Face of Cost-Based Optimizer: PL/SQL Specific Statistics
PPTX
了解IO协议栈
PPTX
Io 120404052713-phpapp01
PDF
Kernel Recipes 2017 - Performance analysis Superpowers with Linux BPF - Brend...
PDF
Kernel Recipes 2017: Performance Analysis with BPF
PPTX
Writing efficient sql
PDF
Kernel Recipes 2013 - Deciphering Oopsies
PDF
R07_Senegacnik_CBO.pdf
PPT
Informix Warehouse Accelerator (IWA) features in version 12.1
PDF
クラウドDWHとしても進化を続けるPivotal Greenplumご紹介
PDF
My old security advisories on HMI/SCADA and industrial software released betw...
PPT
Thomas+Niewel+ +Oracletuning
PPTX
Top 10 tips for Oracle performance
PDF
OSSNA 2017 Performance Analysis Superpowers with Linux BPF
PPT
Introduction to Parallel Execution
PPTX
Cassandra Performance Benchmark
PPTX
Debugging linux issues with eBPF
In Memory Database In Action by Tanel Poder and Kerry Osborne
Oracle Database In-Memory Option in Action
Oracle Basics and Architecture
The Hidden Face of Cost-Based Optimizer: PL/SQL Specific Statistics
了解IO协议栈
Io 120404052713-phpapp01
Kernel Recipes 2017 - Performance analysis Superpowers with Linux BPF - Brend...
Kernel Recipes 2017: Performance Analysis with BPF
Writing efficient sql
Kernel Recipes 2013 - Deciphering Oopsies
R07_Senegacnik_CBO.pdf
Informix Warehouse Accelerator (IWA) features in version 12.1
クラウドDWHとしても進化を続けるPivotal Greenplumご紹介
My old security advisories on HMI/SCADA and industrial software released betw...
Thomas+Niewel+ +Oracletuning
Top 10 tips for Oracle performance
OSSNA 2017 Performance Analysis Superpowers with Linux BPF
Introduction to Parallel Execution
Cassandra Performance Benchmark
Debugging linux issues with eBPF

More from Sage Computing Services (16)

PDF
Oracle XML DB - What's in it for me?
PDF
Aspects of 10 Tuning
PPT
Back to basics: Simple database web services without the need for SOA
PDF
PDF
Whose fault is it? - a review of application tuning problems
PDF
Lost without a trace
PDF
How Can I tune it When I Can't Change the Code?
PDF
Meet the CBO in Version 11g
PDF
Take a load off! Load testing your Oracle APEX or JDeveloper web applications
PDF
The Cost Based Optimiser in 11gR2
PDF
Transformations - how Oracle rewrites your statements
PDF
Application Express - A web development environment for the masses - and for ...
PPTX
OHarmony - How the Optimiser works
PPTX
Common Coding and Design mistakes (that really mess up performance)
PPTX
Oracle Discoverer is dead - Where to next for BI?
Oracle XML DB - What's in it for me?
Aspects of 10 Tuning
Back to basics: Simple database web services without the need for SOA
Whose fault is it? - a review of application tuning problems
Lost without a trace
How Can I tune it When I Can't Change the Code?
Meet the CBO in Version 11g
Take a load off! Load testing your Oracle APEX or JDeveloper web applications
The Cost Based Optimiser in 11gR2
Transformations - how Oracle rewrites your statements
Application Express - A web development environment for the masses - and for ...
OHarmony - How the Optimiser works
Common Coding and Design mistakes (that really mess up performance)
Oracle Discoverer is dead - Where to next for BI?

Recently uploaded (20)

PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PPTX
Operating system designcfffgfgggggggvggggggggg
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PDF
PTS Company Brochure 2025 (1).pdf.......
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PDF
Nekopoi APK 2025 free lastest update
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PPTX
CHAPTER 2 - PM Management and IT Context
PPTX
Odoo POS Development Services by CandidRoot Solutions
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PPTX
ai tools demonstartion for schools and inter college
PDF
Understanding Forklifts - TECH EHS Solution
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
2025 Textile ERP Trends: SAP, Odoo & Oracle
Upgrade and Innovation Strategies for SAP ERP Customers
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
Operating system designcfffgfgggggggvggggggggg
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PTS Company Brochure 2025 (1).pdf.......
Internet Downloader Manager (IDM) Crack 6.42 Build 41
Design an Analysis of Algorithms II-SECS-1021-03
Nekopoi APK 2025 free lastest update
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
CHAPTER 2 - PM Management and IT Context
Odoo POS Development Services by CandidRoot Solutions
Wondershare Filmora 15 Crack With Activation Key [2025
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
ai tools demonstartion for schools and inter college
Understanding Forklifts - TECH EHS Solution
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...

Bind Peeking - The Endless Tuning Nightmare

  • 1. SAGE Computing Services Customised Oracle Training Workshops and ConsultingCustomised Oracle Training Workshops and Consulting Bind Peeking – The Endless Tuning Nightmare Penny Cookson Managing Director and Principal Consultant Working with Oracle products since 1987 Oracle Magazine Educator of the Year 2004 Oracle ACE www.sagecomputing.com.au penny@sagecomputing.com.au
  • 2. Characteristics I haven’t changed anything Its really slow this morning I did the same thing yesterday and it was fine Actually its OK nowy No its not Thank you so much you’ve fixed it (I haven’t done anything)y y ( y g)
  • 3. Oracle Version < 9 SELECT COUNT(l quantity) FROM Shared Pool SELECT COUNT(l.quantity) SELECT COUNT(l.quantity) FROM bookings_skew l WHERE resource_code = :v1; FROM bookings_skew_large l WHERE resource_code = :v1; FULL SCAN How many rows do I expect? ‘BRLG’ FULL SCAN ‘PC1’‘PC1’ <Version 9 database N bi d kiNo bind peeking
  • 4. Oracle Version < 9 SELECT COUNT(l quantity) FROM Shared Pool SELECT COUNT(l.quantity) SELECT COUNT(l.quantity) FROM bookings_skew l WHERE resource_code = :v1; FROM bookings_skew l WHERE resource_code = :v1; FULL SCAN How many rows do I expect? ‘PC1’ FULL SCAN ‘BRLG’‘BRLG’ <Version 9 database N bi d kiNo bind peeking
  • 5. What is Bind Peeking?g SELECT COUNT(l quantity) FROM Shared Pool SELECT COUNT(l.quantity) SELECT COUNT(l.quantity) FROM bookings_skew l WHERE resource_code = :v1; FROM bookings_skew l WHERE resource_code = :v1; FULL SCAN How many rows do I expect? ‘BRLG’ FULL SCAN ‘PC1’‘PC1’ >=Version 9 database Bi d kiBind peeking
  • 6. What is Bind Peeking?g SELECT COUNT(l quantity) FROM Shared Pool SELECT COUNT(l.quantity) SELECT COUNT(l.quantity) FROM bookings_skew l WHERE resource_code = :v1; FROM bookings_skew l WHERE resource_code = :v1; INDEXED ACCESS How many rows do I expect? ‘PC1’ ACCESS ‘ G‘BRLG’ >=Version 9 database Bi d kiBind peeking
  • 7. No Histogramg *************************************** SINGLE TABLE ACCESS PATHSINGLE TABLE ACCESS PATH Column (#3): RESOURCE_CODE(VARCHAR2) AvgLen: 5.00 NDV: 9 Nulls: 0 Density: 0.11111 Table: BOOKINGS SKEW Alias: L 5527238/9 = 614138 Table: BOOKINGS_SKEW Alias: L Card: Original: 5527238 Rounded: 614138 Computed: 614137.56 Non Adjusted: 614137.56 Access Path: TableScanAccess Path: TableScan Cost: 7701.80 Resp: 7701.80 Degree: 0 Cost_io: 7426.00 Cost_cpu: 1605072831 Resp io: 7426.00 Resp cpu: 1605072831p_ p_ p Access Path: index (AllEqRange) Index: BK_RESSKEW resc_io: 32580.00 resc_cpu: 509053165 ix_sel: 0.11111 ix_sel_with_filters: 0.11111 Cost: 32667.47 Resp: 32667.47 Degree: 1 Best:: AccessPath: TableScan Cost: 7701.80 Degree: 1 Resp: 7701.80 Card: 614137.56 Bytes: 0 ***************************************
  • 8. Histogram – Majority Firstg j y *************************************** SINGLE TABLE ACCESS PATH Column (#3): RESOURCE_CODE(VARCHAR2) AvgLen: 5.00 NDV: 9 Nulls: 0 Density: 9.0892e-008 Histogram: Freq #Bkts: 9 UncompBkts: 5966 EndPtVals: 9 Table: BOOKINGS_SKEW Alias: L Card: Original: 5464800 Rounded: 1727558 Computed: 1727558.30 Non Adjusted: 1727558.30 A P th T bl SAccess Path: TableScan Cost: 7710.70 Resp: 7710.70 Degree: 0 Cost_io: 7426.00 Cost_cpu: 1656892911 Resp io: 7426 00 Resp cpu: 1656892911 RESO COUNT(*) ---- ---------- VCR1 495711 CONF 495720 LNCH 743576Resp_io: 7426.00 Resp_cpu: 1656892911 Access Path: index (AllEqRange) Index: BK_RESSKEW resc io: 94139 00 resc cpu: 1468544140 LNCH 743576 BRSM 743583 PC1 47858 FLPC 495720 BRLG 1739277 resc_io: 94139.00 resc_cpu: 1468544140 ix_sel: 0.31612 ix_sel_with_filters: 0.31612 Cost: 94391.34 Resp: 94391.34 Degree: 1 Best:: AccessPath: TableScan TAP1 247864 VCR2 495715 Best:: AccessPath: TableScan Cost: 7710.70 Degree: 1 Resp: 7710.70 Card: 1727558.30 Bytes: 0 ***************************************
  • 9. Histogram – Minority Firstg y *************************************** SINGLE TABLE ACCESS PATH Column (#3): RESOURCE_CODE(VARCHAR2) AvgLen: 5.00 NDV: 9 Nulls: 0 Density: 9.0892e-008 Histogram: Freq #Bkts: 9 UncompBkts: 5966 EndPtVals: 9 Table: BOOKINGS_SKEW Alias: L Card: Original: 5464800 Rounded: 43968 Computed: 43967.55 Non Adjusted: 43967.55 A P th T bl SAccess Path: TableScan Cost: 7693.35 Resp: 7693.35 Degree: 0 Cost_io: 7426.00 Cost_cpu: 1555877511 Resp io: 7426 00 Resp cpu: 1555877511 RESO COUNT(*) ---- ---------- VCR1 495711 CONF 495720 Resp_io: 7426.00 Resp_cpu: 1555877511 Access Path: index (AllEqRange) Index: BK_RESSKEW resc io: 2399 00 resc cpu: 37397785 LNCH 743576 BRSM 743583 PC1 47858 FLPC 495720 BRLG 1739277resc_io: 2399.00 resc_cpu: 37397785 ix_sel: 0.0080456 ix_sel_with_filters: 0.0080456 Cost: 2405.43 Resp: 2405.43 Degree: 1 Best:: AccessPath: IndexRange Index: BK RESSKEW BRLG 1739277 TAP1 247864 VCR2 495715 Best:: AccessPath: IndexRange Index: BK_RESSKEW Cost: 2405.43 Degree: 1 Resp: 2405.43 Card: 43967.55 Bytes: 0 ***************************************
  • 10. What is the CBO OK at Data Condition Literal/Bind Var Histogramg Even Distribution Equality Literal N/A Even Distribution Equality Bind N/A Skewed Equality Literal NO Skewed Equality Literal YESSkewed Equality Literal YES Skewed Equality Bind NO Skewed Equality Bind YES
  • 11. Histogramsg V i < 9 Hi t ith bi d i blVersions < 9: Histograms are no use with bind variables Versions >= 9: Histograms are worse than no useVersions > 9: Histograms are worse than no use with bind variables Each distinct SQL uses only either minority or majority Unless… values but not both Or you don’t keep/use the statements in the shared pool (in which case you might as well use literals)( y g )
  • 12. So if I have no Skewed Data I am OK? Data Condition Literal/Bind Var Histogramg Even Distribution Equality Literal N/A Even Distribution Equality Bind N/A Skewed Equality Literal NO Skewed Equality Literal YESSkewed Equality Literal YES Skewed Equality Bind NO Skewed Equality Bind YES
  • 13. Minority Range Firsty g ******************************************************************************** SINGLE TABLE ACCESS PATHSINGLE TABLE ACCESS PATH Column (#2): EVENT_NO(NUMBER) AvgLen: 5.00 NDV: 99178 Nulls: 0 Density: 1.0083e-005 Min: 211 Max: 100175 Table: BOOKINGS EVEN Alias: LTable: BOOKINGS_EVEN Alias: L Card: Original: 5522697 Rounded: 4973 Computed: 4972.66 Non Adjusted: 4972.66 Access Path: TableScanAccess Path: TableScan Cost: 7742.79 Resp: 7742.79 Degree: 0 Cost_io: 7492.00 Cost_cpu: 1459499283 Resp io: 7492.00 Resp cpu: 1459499283 MIN MAX ------ ------ 100 100200p_ p_ p Access Path: index (RangeScan) Index: BK_EVTEVEN resc_io: 4992.00 resc_cpu: 37790328 ix_sel: 9.0040e-004 ix_sel_with_filters: 9.0040e-004 Cost: 4998.49 Resp: 4998.49 Degree: 1 Best:: AccessPath: IndexRange Index: BK_EVTEVEN Cost: 4998.49 Degree: 1 Resp: 4998.49 Card: 4972.66 Bytes: 0 ******************************************************************************
  • 14. So if I have no Skewed Data I am OK? Data Condition Literal/Bind Var Histogramg Even Distribution Equality Literal N/A Even Distribution Equality Bind N/A Skewed Equality Literal NO Skewed Equality Literal YESSkewed Equality Literal YES Skewed Equality Bind NO Skewed Equality Bind YES Even Distribution Range Bind N/A
  • 15. Partitions? Which statistics shall we use? Resource code Resource_code has 1 value Partition empty _ has approx 5600 values has 1 valueempty <100 <200 <300 <400 <500 Global statistics resource_code has 6116 values
  • 16. What Can We do? Own code:- Use Literals – but only for skewed data Write separate code for minority/majority Give user separate menu options Daily report v Annual report Build sql dynamically with hints for various cases User not aware (and keep your histograms)
  • 17. What Can We do? Package:- If we have no histogram what is it doing? Full scan Is a full scan acceptable? Yes No histogram Turn off bind peeking _optim_peek_user_binds=false_ p _p _ _ Is a full scan acceptable? Nop Run the majority ones first Different session for majority/minority cases and change session variables
  • 18. What Can We do? Package:- If we have no histogram what is it doing? Index scan (So none of these will help No histogram Turn off bind peekingp g _optim_peek_user_binds=false) Remove index? Create an outline and force a full scan Run the majority ones first Different session for majority/minority cases and change session variables
  • 19. What Can We do? Package:- Purge the statement from the shared pool each execution (10.2.0.4) : dbms_shared_pool.purge ('&address, &hash_value','c')( _ )
  • 20. Oracle 11g - Datag RESO NUM ---- ---------- VCR1 524288 LNCH 786432LNCH 786432 CONF 524288 BRSM 786432BOOKINGS_EVEN PC1 262144 FLPC 524288 BRLG 1310720 TAP1 262144 VCR2 524288VCR2 524288 ---------- sum 5505024
  • 21. Oracle 11g - Datag RESO NUM ---- ---------- RESO NUM ---- ---------- PC2 99 PC3 99 PC4 99 PC1 47865 TAP1 247853 FLPC 495713 PC5 99 PC6 99 PC7 99 PC8 99 BOOKINGS_SKEW CONF 495714 VCR2 495718 VCR1 495720 PC8 99 PC9 99 PC11 101 PC12 102 BRSM 743571 LNCH 743581 BRLG 1737243 ---------- PC13 103 PC14 104 PC15 199 sum 5505024 PC16 399 PC17 799 PC18 999 PC19 1999PC19 1999 PC20 3999 PC10 199
  • 22. Bind Peeking + Adaptive Cursors Summary Statements with bind variables (+histograms) are bind itisensitive The first time you execute a statement with different selectivity it uses the original plan The second time it changes the plan and become bind awareThe second time it changes the plan and become bind aware New values will use a plan for the appropriate selectivity range Be careful when statements become invalidated by:- Gathering statistics Flushing the shared pool Restarting the database Or when they are aged out
  • 23. Adaptive Cursors Functionality Adaptive Cursors 11 1 0 6Adaptive Cursors 11.1.0.6 Bind variable with Equality and Histogram Not for range conditionsNot for range conditions Adaptive Cursors 11.1.0.7 Bind variable with Equality and HistogramBind variable with Equality and Histogram Range conditions Do Not Support LIKEDo Not Support LIKE Future? LIKELIKE SELECT /*+ HINT TO MAKE IT BIND AWARE */
  • 24. Gathering Statisticsg E l CBO “M k th t ti ti l l ”Early CBO: “Make sure you gather statistics regularly” Later CBO: “Don’t gather statistics unless data patterns change”change BUT If you have new majority values you need to recreate the histogram
  • 25. SQL Plan Management Manual capture DBMS_SPM.LOAD_PLANS_FROM_SQLSET DBMS SPM.LOAD PLANS FROM CURSOR CACHE Auto capture of repeatable statements OPTIMIZER_CAPTURE_SQL_PLAN_BASELINE = TRUE DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE B li SQL Management Base M l l d/ t f l Baseline = (Stored and Accepted plans) Manual load/accept of new plan DBMS_SPM.LOAD_PLANS_FROM_SQLSET DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE SQL Tuning Advisor identifies new plan SQL*Profile accepted Auto accept of new plan (if it performs better) N Pl plan – SQL Profile accepted (if it performs better) DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE New Plan identified during execution Stored not accepted
  • 26. SQL Plan Management – Binds • Will not automatically handle adaptive cursors • New plan identified on first execution• New plan identified on first execution • New plan recorded as not accepted • Plan will not evolve • All bind variable values use same baseline plan • Plans show as not bind sensitive or aware
  • 27. SQL Plan Management – Binds
  • 28. SQL Plan Management – Binds
  • 29. SQL Plan Management – Binds Force Acceptance of the plan
  • 30. SAGE Computing Services Customised Oracle Training Workshops and ConsultingCustomised Oracle Training Workshops and Consulting Questions? tiwww.sagecomputing.com.au penny@sagecomputing.com.au