Method to find Oracle high consumption statements
- 2020-03-30 02:24:13
- OfStack
Before you can run the following script, you need to find the starting and ending snapshot Numbers: begin_snap and end_snap with the SQL that generated the AWR report (the program script is normally stored in the RDBMS /admin under $ORACLE_HOME, named awrrpt-sql, and you need to enter the range of days to generate the AWR report).
Save the script output to notepad TXT, and change the notepad suffix to.html, so you can output the following web content:
< img SRC = "border = 0 / / files.jb51.net/file_images/article/201403/20140322145210.jpeg? 2014222145638 ">
<span style="font-size:18px;">set line 1000
set linesize 200
set pagesize 2000
set long 999999
set echo on
set markup html on
select res.*
from (select to_char(d.end_interval_time,'yyyy-mm-dd'),
a.PARSING_SCHEMA_NAME,
c.MODULE,
a.sql_id,
a.execs as Number of executions ,
ROUND(a.cpu_times / a.execs, 2) as Single execution time ,
a.cpu_times as cpu Elapsed time ,
ROUND(a.cpu_times / b.sum_time * 100, 2) as consumption cpu The percentage ,
a.buffer_gets as Logical reads ,
ROUND(a.buffer_gets / b.sum_buffer * 100, 2) as Logical read percentage ,
a.disk_read as Physical reads ,
ROUND(a.disk_read / b.sum_disk * 100, 2) as Percentage physical read ,
c.sql_fulltext
from (select PARSING_SCHEMA_NAME,
sql_id,
sum(EXECUTIONS_DELTA) AS execs,
round(sum(CPU_TIME_DELTA) / 1000000, 2) AS cpu_times,
round(sum(ELAPSED_TIME_DELTA) / 1000000, 2) AS elapsed_time,
sum(BUFFER_GETS_DELTA) AS buffer_gets,
sum(DISK_READS_DELTA) AS disk_read
from sys.WRH$_SQLSTAT wr, gv$instance i
where SNAP_ID <= &end_snap
and snap_id >= &begin_snap
and wr.INSTANCE_NUMBER = i.INSTANCE_NUMBER
and i.instance_number = &instance_number
group by PARSING_SCHEMA_NAME, wr.INSTANCE_NUMBER, sql_id) a,
(SELECT round(SUM(CPU_TIME_DELTA) / 1000000, 2) sum_time,
SUM(BUFFER_GETS_DELTA) sum_buffer,
sum(DISK_READS_DELTA) sum_disk
FROM sys.WRH$_SQLSTAT wr, gv$instance i
where SNAP_ID <= &end_snap
and snap_id >= &begin_snap
and wr.INSTANCE_NUMBER = i.INSTANCE_NUMBER
and i.instance_number = &instance_number) b,
v$sqlarea c,
dba_hist_snapshot d
where a.execs > 0
and a.sql_id = c.sql_id
and a.PARSING_SCHEMA_NAME <> 'SYS'
and d.snap_id = &end_snap
order by cpu Elapsed time desc) res
where rownum < 41;
exit</span>
Save the script output to notepad TXT, and change the notepad suffix to.html, so you can output the following web content:
< img SRC = "border = 0 / / files.jb51.net/file_images/article/201403/20140322145210.jpeg? 2014222145638 ">