Step 10a – Which TEMP column exists?
PROMPT [STEP 10a] Check TEMP-related columns in DBA_HIST_SQLSTAT
COLUMN column_name FORMAT A35
SELECT column_name
FROM dba_tab_columns
WHERE owner = 'SYS'
AND table_name = 'DBA_HIST_SQLSTAT'
AND column_name LIKE 'TEMP%';
Step 10b(i) – TEMP usage (if
TEMP_SPACE_ALLOCATED_DELTA
exists)
PROMPT [STEP 10b(i)] TEMP usage (AWR, using TEMP_SPACE_ALLOCATED_DELTA)
COLUMN temp_gb FORMAT 999,999,990.000
SELECT ROUND(SUM(temp_space_allocated_delta)/1024/1024/1024,3) AS temp_gb
FROM dba_hist_sqlstat
WHERE sql_id='&sql_id';
Step 10b(ii) – TEMP usage (if
TEMP_SPACE_ALLOCATED
exists)
PROMPT [STEP 10b(ii)] TEMP usage (AWR, using TEMP_SPACE_ALLOCATED)
COLUMN temp_gb FORMAT 999,999,990.000
SELECT ROUND(SUM(temp_space_allocated)/1024/1024/1024,3) AS temp_gb
FROM dba_hist_sqlstat
WHERE sql_id='&sql_id';
Step 10c – Workarea spill evidence (Optimal/One-pass/Multipass)
PROMPT [STEP 10c] Workarea executions (Optimal vs One-pass vs Multipass)
COLUMN optimal FORMAT 999,999,999 HEADING 'OPTIMAL'
COLUMN onepass FORMAT 999,999,999 HEADING 'ONEPASS'
COLUMN multipass FORMAT 999,999,999 HEADING 'MULTIPASS'
SELECT SUM(optimal_executions) AS optimal,
SUM(onepass_executions) AS onepass,
SUM(multipasses_executions) AS multipass
FROM dba_hist_sql_workarea
WHERE sql_id='&sql_id';
Step 10d – ASH corroboration (TEMP wait events)
PROMPT [STEP 10d] ASH temp wait events (evidence of TEMP spills)
COLUMN event FORMAT A30
COLUMN samples FORMAT 999,999,999
SELECT event, COUNT(*) AS samples
FROM dba_hist_active_sess_history
WHERE sql_id='&sql_id'
AND event IN ('direct path read temp','direct path write temp')
GROUP BY event
ORDER BY samples DESC;
Step 10e – Current PGA headroom (runtime)
PROMPT [STEP 10e] PGA memory snapshot (current)
COLUMN name FORMAT A35
COLUMN value FORMAT 999,999,999,999
SELECT name, value
FROM v$pgastat
WHERE name IN ('total PGA allocated','PGA cache hit percentage');
Step 11 – I/O latency during periods this SQL appeared
PROMPT [STEP 11] I/O Latency (AWR filestats restricted to this SQL's min..max snaps)
COLUMN filetype_name FORMAT A20
COLUMN ms_per_read FORMAT 999.999
COLUMN ms_per_write FORMAT 999.999
WITH r AS (
SELECT MIN(snap_id) b, MAX(snap_id) e
FROM dba_hist_sqlstat
WHERE sql_id='&sql_id'
)
SELECT f.filetype_name,
ROUND(f.readtim / DECODE(NULLIF(f.phyrds ,0),0,1,f.phyrds ),3) AS ms_per_read,
ROUND(f.writetim / DECODE(NULLIF(f.phywrts,0),0,1,f.phywrts),3) AS ms_per_write
FROM dba_hist_filestatxs f, r
WHERE f.snap_id BETWEEN r.b AND r.e
GROUP BY f.filetype_name, f.readtim, f.phyrds, f.writetim, f.phywrts
ORDER BY ms_per_read DESC NULLS LAST;
Step 12 – Plan inventory (cache + historical + actuals)
PROMPT [STEP 12a] Current plan hashes in cache (if present)
COLUMN inst_id FORMAT 99
COLUMN plan_hash_value FORMAT 9999999999
SELECT DISTINCT inst_id, plan_hash_value
FROM gv$sql
WHERE sql_id='&sql_id'
ORDER BY inst_id;
PROMPT [STEP 12b] Historical plans seen in AWR
COLUMN occurrences FORMAT 999,999
SELECT plan_hash_value, COUNT(*) AS occurrences
FROM dba_hist_sql_plan
WHERE sql_id='&sql_id'
GROUP BY plan_hash_value
ORDER BY occurrences DESC;
PROMPT [STEP 12c] Current plan with actuals (if cached recently)
COLUMN id FORMAT 999
COLUMN operation FORMAT A45
COLUMN op_elapsed_s FORMAT 999,999,999.000
SELECT inst_id,
plan_hash_value,
id,
LPAD(' ',2*depth)||operation||' '||options AS operation,
cardinality,
starts,
output_rows,
ROUND(elapsed_time/1e6,3) AS op_elapsed_s
FROM gv$sql_plan_statistics_all
WHERE sql_id='&sql_id'
ORDER BY inst_id, plan_hash_value, id;
Step 13 - Key optimizer/parallel/PGA params (for env diff)
PROMPT [STEP 14] Key Optimizer / Parallel / PGA parameters (snapshot for diff)
COLUMN name FORMAT A40
COLUMN value FORMAT A60
SELECT name, value
FROM v$parameter
WHERE name IN (
'optimizer_features_enable','optimizer_mode','cursor_sharing',
'parallel_degree_policy','parallel_min_time_threshold',
'pga_aggregate_target','pga_aggregate_limit'
)
ORDER BY name;