denrepo

OracleSQL tuning

SQL running with more than one plan

Statements in the cursor cache with several plan hash values, showing the best and worst average time. A wide gap is the classic sign of plan instability.

Not yet verified. How scripts are tested

ora-multi-plan.sql
1CLEAR COLUMNS2SET LINESIZE 140 PAGESIZE 100 TRIMOUT ON TAB OFF3COLUMN sql_id       FORMAT A134COLUMN plans        FORMAT 9905COLUMN execs        HEADING "EXECS"        FORMAT 999,999,9996COLUMN best_avg_ms  HEADING "BEST AVG MS"  FORMAT 999,999,990.97COLUMN worst_avg_ms HEADING "WORST AVG MS" FORMAT 999,999,990.98 9SELECT * FROM (10  SELECT sql_id,11         COUNT(DISTINCT plan_hash_value) AS plans,12         SUM(executions) AS execs,13         ROUND(MIN(elapsed_time / NULLIF(executions, 0)) / 1e3, 1) AS best_avg_ms,14         ROUND(MAX(elapsed_time / NULLIF(executions, 0)) / 1e3, 1) AS worst_avg_ms15  FROM v$sql16  WHERE executions > 017  GROUP BY sql_id18  HAVING COUNT(DISTINCT plan_hash_value) > 119  ORDER BY MAX(elapsed_time / NULLIF(executions, 0)) DESC20) WHERE ROWNUM <= 25;

Save it as ora-multi-plan.sql and run it with SQL> @ora-multi-plan.

Open in denrepo

More Oracle scripts: SQL tuning