ASH AND AWR PERFORMANCE
TUNING SCRIPTS
Posted by Gavin Soorma
On November 16, 2012 1 Comments
ASH, awr, Performance Tuning, scripts
Listed below are some SQL queries which I find
particularly useful for performance tuning. These
are based on the Active Session History V$ View to
get a current perspective of performance and the
DBA_HIST_* AWR history tables for obtaining
performance data pertaining to a period of time in
the past.
I would like to add that these queries have been
customised by me based on SQL scripts obtained
from colleagues and peers. So if I am infringing any
copyright material let me know and I shall remove
the same. Also If anyone has any similar useful
scripts to contribute for use by the community do
send it to me and I shall include the same on this
page
Top Recent Wait Events
col EVENT format a60
select * from (
select active_session_history.event,
sum(active_session_history.wait_time +
active_session_history.time_waited) ttl_wait_time
from v$active_session_history active_session_hist
ory
where active_session_history.event is not null
group by active_session_history.event
order by 2 desc)
where rownum < 6
/
Top Wait Events Since
Instance Startup
col event format a60
select event, total_waits, time_waited
from v$system_event e, v$event_name n
where n.event_id = e.event_id
and n.wait_class !='Idle'
and n.wait_class = (select wait_class from v$session
_wait_class
where wait_class !='Idle'
group by wait_class having
sum(time_waited) = (select max(sum(time_waited)) fr
om v$session_wait_class
where wait_class !='Idle'
converted by Web2PDFConvert.com
group by (wait_class)))
order by 3;
List Of Users Currently
Waiting
col username format a12
col sid format 9999
col state format a15
col event format a50
col wait_time format 99999999
set pagesize 100
set linesize 120
select s.sid, s.username, se.event, se.state, se.wait_ti
me
from v$session s, v$session_wait se
where s.sid=se.sid
and se.event not like 'SQL*Net%'
and se.event not like '%rdbms%'
and s.username is not null
order by se.wait_time;
Find The Main Database
Wait Events In A
Particular Time Interval
First determine the snapshot id values for the
period in question.
In this example we need to find the SNAP_ID for
the period 10 PM to 11 PM on the 14th of
November, 2012.
select snap_id,begin_interval_time,end_interval_tim
e
from dba_hist_snapshot
where to_char(begin_interval_time,'DD-MON-YYYY
')='14-NOV-2012'
and EXTRACT(HOUR FROM begin_interval_time)
between 22 and 23;
set verify off
select * from (
select active_session_history.event,
sum(active_session_history.wait_time +
active_session_history.time_waited) ttl_wait_time
from dba_hist_active_sess_history
active_session_history
where event is not null
and SNAP_ID between &ssnapid and &esnapid
group by active_session_history.event
order by 2 desc)
where rownum
Top CPU Consuming SQL
During A Certain Time
Period
Note in this case we are finding the Top 5 CPU
intensive SQL statements executed between 9.00
AM and 11.00 AM
select * from (
select
converted by Web2PDFConvert.com
SQL_ID,
sum(CPU_TIME_DELTA),
sum(DISK_READS_DELTA),
count(*)
from
DBA_HIST_SQLSTAT a, dba_hist_snapshot s
where
s.snap_id = a.snap_id
and s.begin_interval_time > sysdate -1
and EXTRACT(HOUR FROM S.END_INTERVAL_T
IME) between 9 and 11
group by
SQL_ID
order by
sum(CPU_TIME_DELTA) desc)
where rownum
Which Database Objects
Experienced the Most
Number of Waits in the
Past One Hour
set linesize 120
col event format a40
col object_name format a40
select * from
(
select dba_objects.object_name,
dba_objects.object_type,
active_session_history.event,
sum(active_session_history.wait_time +
active_session_history.time_waited) ttl_wait_time
from v$active_session_history active_session_hist
ory,
dba_objects
where
active_session_history.sample_time between sysda
te - 1/24 and sysdate
and active_session_history.current_obj# = dba_obj
ects.object_id
group by dba_objects.object_name, dba_objects.o
bject_type, active_session_history.event
order by 4 desc)
where rownum < 6;
Top Segments ordered
by Physical Reads
col segment_name format a20
col owner format a10
select segment_name,object_type,total_physical_re
ads
from ( select owner||'.'||object_name as segment_nam
e,object_type,
value as total_physical_reads
from v$segment_statistics
where statistic_name in ('physical reads')
order by total_physical_reads desc)
where rownum
Top 5 SQL statements in
converted by Web2PDFConvert.com
the past one hour
select * from (
select active_session_history.sql_id,
dba_users.username,
sqlarea.sql_text,
sum(active_session_history.wait_time +
active_session_history.time_waited) ttl_wait_time
from v$active_session_history active_session_hist
ory,
v$sqlarea sqlarea,
dba_users
where
active_session_history.sample_time between sysda
te - 1/24 and sysdate
and active_session_history.sql_id = sqlarea.sql_id
and active_session_history.user_id = dba_users.us
er_id
group by active_session_history.sql_id,sqlarea.sql
_text, dba_users.username
order by 4 desc )
where rownum
SQL with the highest I/O
in the past one day
select * from
(
SELECT /*+LEADING(x h) USE_NL(h)*/
h.sql_id
, SUM(10) ash_secs
FROM dba_hist_snapshot x
, dba_hist_active_sess_history h
WHERE x.begin_interval_time > sysdate -1
AND h.SNAP_id = X.SNAP_id
AND h.dbid = x.dbid
AND h.instance_number = x.instance_number
AND h.event in ('db file sequential read','db file sc
attered read')
GROUP BY h.sql_id
ORDER BY ash_secs desc )
where rownum
Top CPU consuming
queries since past one
day
select * from (
select
SQL_ID,
sum(CPU_TIME_DELTA),
sum(DISK_READS_DELTA),
count(*)
from
DBA_HIST_SQLSTAT a, dba_hist_snapshot s
where
s.snap_id = a.snap_id
and s.begin_interval_time > sysdate -1
group by
SQL_ID
order by
sum(CPU_TIME_DELTA) desc)
where rownum
converted by Web2PDFConvert.com
Find what the top SQL
was at a particular
reported time of day
First determine the snapshot id values for the
period in question.
In thos example we need to find the SNAP_ID for
the period 10 PM to 11 PM on the 14th of
November, 2012.
select snap_id,begin_interval_time,end_interval_tim
e
from dba_hist_snapshot
where to_char(begin_interval_time,'DD-MON-YYYY
')='14-NOV-2012'
and EXTRACT(HOUR FROM begin_interval_time)
between 22 and 23;
select * from
(
select
sql.sql_id c1,
sql.buffer_gets_delta c2,
sql.disk_reads_delta c3,
sql.iowait_delta c4
from
dba_hist_sqlstat sql,
dba_hist_snapshot s
where
s.snap_id = sql.snap_id
and
s.snap_id= &snapid
order by
c3 desc)
where rownum < 6
/
Analyse a particular SQL
ID and see the trends for
the past day
select
s.snap_id,
to_char(s.begin_interval_time,'HH24:MI') c1,
sql.executions_delta c2,
sql.buffer_gets_delta c3,
sql.disk_reads_delta c4,
sql.iowait_delta c5,
sql.cpu_time_delta c6,
sql.elapsed_time_delta c7
from
dba_hist_sqlstat sql,
dba_hist_snapshot s
where
s.snap_id = sql.snap_id
and s.begin_interval_time > sysdate -1
and
sql.sql_id='&sqlid'
order by c7
/
converted by Web2PDFConvert.com
Do we have multiple
plan hash values for the
same SQL ID in that
case may be changed
plan is causing bad
performance
select
SQL_ID
, PLAN_HASH_VALUE
, sum(EXECUTIONS_DELTA) EXECUTIONS
, sum(ROWS_PROCESSED_DELTA) CROWS
, trunc(sum(CPU_TIME_DELTA)/1000000/60) CPU_
MINS
, trunc(sum(ELAPSED_TIME_DELTA)/1000000/60)
ELA_MINS
from DBA_HIST_SQLSTAT
where SQL_ID in (
'&sqlid')
group by SQL_ID , PLAN_HASH_VALUE
order by SQL_ID, CPU_MINS;
Top 5 Queries for past
week based on ADDM
recommendations
/*
Top 10 SQL_ID's for the last 7 days as identified by
ADDM
from DBA_ADVISOR_RECOMMENDATIONS and
dba_advisor_log
*/
col SQL_ID form a16
col Benefit form 9999999999999
select * from (
select b.ATTR1 as SQL_ID, max(a.BENEFIT) as "Be
nefit"
from DBA_ADVISOR_RECOMMENDATIONS a, D
BA_ADVISOR_OBJECTS b
where a.REC_ID = b.OBJECT_ID
and a.TASK_ID = b.TASK_ID
and a.TASK_ID in (select distinct b.task_id
from dba_hist_snapshot a, dba_advisor_tasks b, db
a_advisor_log l
where a.begin_interval_time > sysdate - 7
and a.dbid = (select dbid from v$database)
and a.INSTANCE_NUMBER = (select INSTANCE_
NUMBER from v$instance)
and to_char(a.begin_interval_time, 'yyyymmddHH2
4') = to_char(b.created, 'yyyymmddHH24')
and b.advisor_name = 'ADDM'
and b.task_id = l.task_id
and l.status = 'COMPLETED')
and length(b.ATTR4) > 1 group by b.ATTR1
order by max(a.BENEFIT) desc) where rownum < 6;
converted by Web2PDFConvert.com
1 COMMENTS
Sudipta Bhaskar
Apr 4 2017
Very much helpful.
LEAVE REPLY
Your email address will not be published. Required
fields are marked *
Comment
Name * Email * Website
P O S T C O M M E N T
R E C E N T P O S T S
Data Redaction New Features in Oracle 12c
Release 2
June 27, 2017
Oracle 12c Release 2 New Feature Online and
Automatic Tablespace Encryption
June 22, 2017
Oracle 12c Release 2 Multitenancy New Features
June 21, 2017
Speaker at OTN Yathra 2017
converted by Web2PDFConvert.com
June 11, 2017
Oracle 12c Release 2 Partitioning New Features
May 15, 2017
C O N T A C T M E
Perth, Australia
+ (61) 417713124
[email protected]
R E C E N T C O M M E N T S A N D F E E D B A C K
Victor Kisovi
on
Oracle 11g Grid Control Agent Deployment
Thanks Garvin. This is helpful.
shravan
on
DBA Monitoring Menu
Hi Gavin, One single script..will reduce much work
of DBA's. Thanks for the script. really appreciated.
Subrahmanya Sarma Neralla
on
Speaker at OTN Yathra 2017
Thank you Gavin Soorma for very nice
presentation. I have attended your session
@Hyderabad and it was very good.
skmanoharan10097859600
on
Using GoldenGate 12c with an Oracle 12c
Multitenant database
Hi Gavin Thanks a lot for your nice article. As
Oracle 12C is more focused on Database
consolidation I am
Chandra
on
DBA Monitoring Menu
Excellent Work...can be easily deployed to make it
work in our environment.
Gavin Soorma
on
converted by Web2PDFConvert.com
Oracle 12c Release 2 (12.2.0.1.0) Grid Infrastructure
Upgrade
Hi - it is mentioned in the MOS note "Patches to
apply before upgrading Oracle GI and DB to
12.2.0.1
brian choy
on
RMAN 11g new feature Backup Fast Recovery
Area (FRA) to Disk
Excellent feature that make our data more robust,
I have yet to test it out
Kuntal
on
Performing a database clone using a Data Guard
Snapshot Database
Hi Gavin, Thanks for the document, I was working
on the same kind of cloning process (test db from
snapshot
RIchard Guo
on
Oracle Goldengate 12c on DBFS for RAC and
Exadata
Hi, I am interested in "Oracle Goldengate 12c on
DBFS for RAC and Exadata" article. Before I pay
membership I'd
Jon Adams
on
Oracle 12c Release 2 (12.2.0.1.0) Grid Infrastructure
Upgrade
I had a base 12.1.0.2 RAC install in a virtual
environment and went through the upgrade docs
which recommended running
@2016 gavinsoorma.com Powered by Specular theme for
Wordpress
converted by Web2PDFConvert.com