myorama
9/22/2015 - 2:45 PM

Retreive SQL ID of queries that reclaims a lot of temp segments provoking ORA-01652. Source: http://www.pythian.com/blog/sleuthing-for-tempo

Retreive SQL ID of queries that reclaims a lot of temp segments provoking ORA-01652. Source: http://www.pythian.com/blog/sleuthing-for-temporary-space-spendthrifts/

SELECT *
FROM
  (SELECT Rank() over ( ORDER BY SUM(NVL(temp_space_delta, 0)) DESC) position,
    sql_id,
    sql_plan_hash_value,
    sql_plan_operation,
    sql_plan_line_id,
    COUNT(DISTINCT sql_exec_id) total_execs,
    TRUNC(SUM(NVL(temp_space_delta, 0)) / 1024 / 1024)
    ||'m' temp_usage
  FROM
    (SELECT sql_exec_id,
      sql_id,
      sql_plan_hash_value,
      sql_plan_operation,
      sql_plan_line_id,
      temp_space_allocated - NVL(Lag(temp_space_allocated, 1) over ( PARTITION BY sql_exec_id, sql_id, session_id ORDER BY sample_id), 0) temp_space_delta
    FROM nagios.temp_segment_history
    )
  GROUP BY sql_id,
    sql_plan_operation,
    sql_plan_hash_value,
    sql_plan_line_id
  )
WHERE position <= 10
ORDER BY position;
CREATE TABLE nagios.temp_segment_history AS
SELECT *
FROM dba_hist_active_sess_history
WHERE dbid =
  (SELECT dbid FROM v$database
  )
AND snap_id IN
  (SELECT snap_id
  FROM dba_hist_snapshot
  WHERE dbid =
    (SELECT dbid FROM v$database
    )
  AND begin_interval_time BETWEEN To_date( '2015-02-27 08:00', 'yyyy-mm-dd hh24:mi') AND To_date( '2015-02-27 09:00', 'yyyy-mm-dd hh24:mi')
  );
SELECT sql_text FROM dba_hist_sqltext WHERE sql_id = '&sqlid';