Call now: 252-767-6166  
Oracle Training Oracle Support Development Oracle Apps

 E-mail Us
 Oracle Articles
New Oracle Articles

 Oracle Training
 Oracle Tips

 Oracle Forum
 Class Catalog

 Remote DBA
 Oracle Tuning
 Emergency 911
 RAC Support
 Apps Support
 Oracle Support

 SQL Tuning

 Oracle UNIX
 Oracle Linux
 Remote s
 Remote plans
 Application Server

 Oracle Forms
 Oracle Portal
 App Upgrades
 SQL Server
 Oracle Concepts
 Software Support

 Remote S


 Consulting Staff
 Consulting Prices
 Help Wanted!


 Oracle Posters
 Oracle Books

 Oracle Scripts

Don Burleson Blog 







SQL explain plan does not match execution statistics

Oracle Database Tips by Donald BurlesonApril 16, 2015


Question:  We have a lot of SQL's which are very non-performant after performing dbms_stats with oracles default job (version 10).  The explain plan shows the optimal access path, but oracle executes a full table scan (but only if the statistics of our performance index exists).  

1. If we don't have statistics for the index, oracle will use the index. The statement returns in 100 ms.

2. If we use the sql without line 'AND (mv_dispo.dispo_belwert_in + mv_dispo.dispo_belwert_out) != 0', oracle will use the index and returns in 100ms.

3. If we use the hint /*+ INDEX(mv_dispo I_MVDISPO_VGBIS_VGAB_BEST_ZEIT) */, oracle will use the index and returns in 100ms.

4. If current CBO statistics (automatically with the dbms_stats oracle default settings), the statement returns in 2-3 minutes and take a full table scan. Oracle uses a different access strategy!?

Why does oracle shows a optimal explain plan and executes the SQL with different access path?  I don't want to use an index hint, so what kind of solution could we take?

Answer:  This is a very interesting problem!  The CBO is a proprietary hunk of extremely sophisticated software, and Oracle does not release details of it's internal machinations. In general, the execution plan with match the fetch, but sometimes the explain plan does not match the real-time execution. 

Warning! - Explain plan gives wrong details!

It's possible that the standard relational ?explain plan for? syntax show a plan that is incorrect, and you may not see the execution plan that is actually being implemented. 
This commonly happens when your query has a bind variable.  This happens because the explain plan utility does not consider the value of a host variable, while the Oracle optimizer may consider a host variable (when bind variable peeking is enabled with the 11g adaptive cursor sharing feature.
As a remedy, you should always use the dbms_xplan utility and avoid using the Oracle implementation of the ANSI standard ?explain plan for querylist? syntax..

However, other possible explanations may include:

    - An "older" execution plan is cached in the library cache

    - Dynamic sampling is altering the execution plan

    - A bind variable influence runtime execution by using query rewrite (via setting cursor_sharing=force of cursor_sharing=similar).

    - Your materialized view re-write has a bug

The only way to know for sure is to run a detailed 10046 (TKPROF) dump and open an SR with MOSC.

>> If we don't have statistics for the index, oracle will use the index.

That's a good clue! How selective is this index? Are you creating a histogram on the index?

>> What kind of solution could we take?

Me, I would force it with a hint, unless you want to explore it with Oracle technical support (and you may find that you have just hit a bug!).

If you don't want to use hints, your only other option is to gerrymander your CBO stats to get the desired results. Don't assume that it's not a bug, either.

>> If we have performing statistics (automatically with oracle default settings)

I would start by adding histograms to the questionable column's:

Have you done your system-level SQL tuning first? Check for optimal system-wide settings for (optimizer_mode, optimizer_index_caching, optimizer_index_cost_adj).  You need to optimize all SQL to your overall workload before tuning outliers:

Get the Complete
Oracle SQL Tuning Information 

The landmark book "Advanced Oracle SQL Tuning  The Definitive Reference"  is filled with valuable information on Oracle SQL Tuning. This book includes scripts and tools to hypercharge Oracle 11g performance and you can buy it for 30% off directly from the publisher.



Oracle Training at Sea
oracle dba poster

Follow us on Twitter 
Oracle performance tuning software 
Oracle Linux poster


Burleson is the American Team

Note: This Oracle documentation was created as a support and Oracle training reference for use by our DBA performance tuning consulting professionals.  Feel free to ask questions on our Oracle forum.

Verify experience! Anyone considering using the services of an Oracle support expert should independently investigate their credentials and experience, and not rely on advertisements and self-proclaimed expertise. All legitimate Oracle experts publish their Oracle qualifications.

Errata?  Oracle technology is changing and we strive to update our BC Oracle support information.  If you find an error or have a suggestion for improving our content, we would appreciate your feedback.  Just  e-mail:  

and include the URL for the page.


Burleson Consulting

The Oracle of Database Support

Oracle Performance Tuning

Remote DBA Services


Copyright © 1996 -  2020

All rights reserved by Burleson

Oracle ® is the registered trademark of Oracle Corporation.