Hi,
>> I am using cursor_sharing=exact.
Do you have any problems with non-reentrant SQL (lots of SQL with executions=1)?
http://www.dba-oracle.com/t_cursor_sharing.htm**********************************************************************
>> When performance goes south, all we do is unpin the
execution plan and let oracle optimizer come with a better plan
which in my opinion is like playing a dice.
I agree!
- How many different execution plans are there?
- One for the majority and one for the outliers?
Usually we have two, one with an FTS and another using an index . . . .
I've seen people deliberately create "plan stability" for the outlier SQL, thereby getting the best of both worlds:
http://www.remote-dba.net/pl_sql/t_optimiz...n_stability.htmYou may also be able to do this in 10g with SQL profiles:
http://www.remote-dba.net/oracle_10g_new_f...ing_advisor.htmIf we examine the evolution of Oracle SQL execution plan (explain plan) management, see see these tools:
Optimizer plan stability (a.k.a. stored outlines) - Stored outlines were cumbersome to manage, and it was very difficult to "swap" execution plans with plan stability.
10g SQL Profiles - Starting in Oracle 10g, we see the SQL Profile approach, whereby a SQL tuning Set (STS) could be tested as a workload, and Oracle would allow the DBA to implement changes to execution plans.
11g SQL Plan management - Starting in 11g we finally see an easy-to-use approach to locking-down SQL execution plans.
***************************************************************************
In sum, I would create the permutations manually and freeze the execution plans. For all of the details, there is an eBook on this subject:
http://www.rampant-books.com/ebook_vendor_tune.htm