Back to Performance Tuning
sql
6b AWR History Often Executed Queries
6b_awr_history_often_executed_queries.sql
Disclaimer:
This script is provided for educational and learning purposes. Review it carefully,
test in a non-production environment, confirm privileges, and validate impact before
using it in production.
SET PAGESIZE 200
SET LINESIZE 260
SET TRIMSPOOL ON
SET TAB OFF
SET VERIFY OFF
SET FEEDBACK ON
COLUMN sql_id FORMAT A13 HEADING 'SQL_ID'
COLUMN sql_text FORMAT A120 HEADING 'SQL_TEXT'
COLUMN seconds_since_date FORMAT 999,999,999,999 HEADING 'SECONDS'
COLUMN execs_since_date FORMAT 999,999,999,999 HEADING 'EXECUTIONS'
COLUMN gets_since_date FORMAT 999,999,999,999 HEADING 'BUFFER_GETS'
COLUMN rows_since_date FORMAT 999,999,999,999 HEADING 'ROWS'
COLUMN average_query_time FORMAT 999,999,999.999 HEADING 'AVG_SEC'
SELECT
sub.sql_id,
txt.sql_text,
sub.seconds_since_date,
sub.execs_since_date,
sub.gets_since_date,
sub.rows_since_date,
round(sub.seconds_since_date /(sub.execs_since_date + 0.01), 3) average_query_time
FROM
(
SELECT
sql_id,
round(SUM(elapsed_time_delta) / 1000000) AS seconds_since_date,
SUM(executions_delta) AS execs_since_date,
SUM(buffer_gets_delta) AS gets_since_date,
SUM(rows_processed_delta) AS rows_since_date,
ROW_NUMBER() OVER (ORDER BY round(SUM(elapsed_time_delta) / 1000 / 1000) DESC) r
FROM
dba_hist_snapshot NATURAL JOIN dba_hist_sqlstat g
WHERE
begin_interval_time > sysdate - 1
--AND parsing_schema_name = 'BILL'
GROUP BY
sql_id
) sub
JOIN dba_hist_sqltext txt ON sub.sql_id = txt.sql_id
WHERE
r < 50
ORDER BY
average_query_time DESC;