85
© 2015 Delphix. All Rights Reserved. Private & Confidential. Performance Data in Database 12c Knowledge is Power AWR and ASH with EM13c Kellyn Pot’Vin-Gorman, Technical Intelligence Manager October 2016

ASH and AWR on DB12c

Embed Size (px)

Citation preview

Page 1: ASH and AWR on DB12c

© 2015 Delphix. All Rights Reserved. Private & Confidential.

Performance Data in Database 12cKnowledge is Power

AWR and ASH with EM13c

Kellyn Pot’Vin-Gorman, Technical Intelligence ManagerOctober 2016

Page 2: ASH and AWR on DB12c

Who am I?

Page 3: ASH and AWR on DB12c

• Optimization- Tune for Time or You’re Wasting Time.• Know your goal(s)• Set a stopping point, avoid OTD, (Obsessive Tuning Disorder)• Do NOT assume. Always do the research and have data behind findings.

Stay on the Path…

Page 4: ASH and AWR on DB12c

• ASH= Active Session History• AWR= Automatic Workload Repository• Introduced in Oracle 10g• Evolution to statspack, requests for performance reporting improvements.• “Always on” approach to performance metrics with requirement of non-

locking collection process.• Requires Management Diagnostic Pack License from Oracle.

Brief History

Page 5: ASH and AWR on DB12c

The Location in EM12c For Some of Today’s Presentation…

Page 6: ASH and AWR on DB12c

Always on with default intervals of 1hr snapshots and 8 days retention. Should have at least 60 days of retained data. Desire more? Have an AWR Warehouse. Interval increase? Use this during workload testing, otherwise, take a manual

snapshot:EXEC DBMS_WORKLOAD_REPOSITORY.create_snapshot;

Automatic Workload Repository, (AWR) Reports

Page 7: ASH and AWR on DB12c

Buffer writes one direction,we read the other!

Page 8: ASH and AWR on DB12c

• To inspect a database level issues, for both a small window of time to extended window.

• Extensive information in report, knowing HOW to parse through the report to achieve goal is important.

• Via EM12c, the report is offered in HTML format and will be environment aware, (single instance, RAC, Exadata.)

• Different reports available from the command line when running from the $ORACLE_HOME/rdbms/admin directory and can be generated in HTML or TXT format.

AWR Reports Are Best Used For..

Page 9: ASH and AWR on DB12c

Wasting Time….

Rarely is there value in this section. As long is everything contains high percentages, move on.

Page 10: ASH and AWR on DB12c

AWR- Top 10 Foreground

•CPU is expected and should be the majority of time.•CPU processing can be extensive though, (still needs to be investigated)•Anything under 10% commonly is disregarded.•Understand what each wait event definition is

Page 11: ASH and AWR on DB12c

Top SQL

Focus on Elapsed Time, but…Displays Top SQL by:CPUIOGetsReads, etc…

Page 12: ASH and AWR on DB12c

Full SQL Statements

Linked from Top SQL Lists in HTML report via SQL_ID links.Quick reference when needed.

Page 13: ASH and AWR on DB12c

SGA “Thrashing”

Page 14: ASH and AWR on DB12c

Why PGA is Important

What is an optimal vs. 1 or (M)ulti-pass executions?

Page 15: ASH and AWR on DB12c

Why Can’t I Achieve 100%??

You shall not pass! (optimal, so 90%, that is… )

Page 16: ASH and AWR on DB12c

Percentages and Amounts of Reads are Important

Top two objects correspond to SQL statements in the top IO and most likely top SQL by elapsed time.

Page 17: ASH and AWR on DB12c

What is a Direct Physical Read?

•Inefficient SQL and objects that have high quantity of row changes involved.•Adds significant pressure in RAC environment, too!

Page 18: ASH and AWR on DB12c

Un-optimized vs. Optimized?

Percentages are low per object, (under 10%, which is a good sign for any database!)This is an exadata, so it means they are either not in the buffer cache or the smart flash cache, which means un-optimized”.This is “somewhat” expected and don’t panic unless you see high percentages.

Page 19: ASH and AWR on DB12c

Initial Transaction Locks

10% rule applies here, too!ALTER TABLE <name> initrans <xx>;

Page 20: ASH and AWR on DB12c

RAC Interconnect Exchange

•Data from V$SYSMETRIC_HISTORY •High Exchange rate can signal and issue.

Page 21: ASH and AWR on DB12c

RAC Cache Interconnect Stats

Page 22: ASH and AWR on DB12c

Transfer Rate Between RAC Nodes

Page 23: ASH and AWR on DB12c

• Excellent for identifying specific issues in database.• Identifies not just the top SQL, but code.• Shows top wait events by sample time.• Don’t confuse samples with AWR snapshots.• Should not be used to track # of executions.

ASH Reports

Page 24: ASH and AWR on DB12c

Buffer writes one direction,We read the other!

Page 25: ASH and AWR on DB12c

Running ASH Report from Cloud Control• ASH is by time, not snapshot.• Set start date and time.• End date and time• Generate report

Page 26: ASH and AWR on DB12c

HTML Format ASH

Page 27: ASH and AWR on DB12c

Main ASH Info

Page 28: ASH and AWR on DB12c

Top SQL, Top Sessions

Page 29: ASH and AWR on DB12c

Top SQL Details

Page 30: ASH and AWR on DB12c

Top Parallel, Top DB Files

Page 31: ASH and AWR on DB12c

ASH Report- Use Case

@$ORACLE_HOME/rdbms/admin/ashrpt.sql; Report Format: Text Performance Issue during day, need to know what’s going on! Run ASH Report from the command line with SQL*Plus:

Page 32: ASH and AWR on DB12c

“Interesting Part”

Page 33: ASH and AWR on DB12c

Finally!

Select * from table(dbms_xplan.display_awr(‘43mp3mjufgnkg’));

Page 34: ASH and AWR on DB12c

AWR and ASH from the Command Line Interface

All DBAs should know how to do this!

Page 35: ASH and AWR on DB12c

$ORACLE_HOME/rdbms/admin/awrrpt.sql;$ORACLE_HOME/rdbms/admin/ashrpt.sql;

$ORACLE_HOME/rdbms/admin/awrsqrpt.sql;Less Known AWR Reports:awrinfo.sql General AWR Infoawrddrpt.sql Comparison report between snapshotsawrblmig.sql Migrates pre-11g baseline data into 11g Baseline tables.awrgrpt.sql RAC Aware AWR Report.

Running Reports, Command Line

Page 36: ASH and AWR on DB12c

Snapshot Interval Information Basic Info on Instances and Nodes No User or Application Schema info. Space Usage by SYSAUX WRH$ and Non- AWR Objects, ordered by size Snapshot info and if any errors. Advisor Tasks

AWR Info Report

Page 37: ASH and AWR on DB12c

AWR General Information Report

Page 38: ASH and AWR on DB12c

ASH Info Report

@$ORACLE_HOME/rdbms/admin/ashrpt.sql; Report Format: Text or HTML

Page 39: ASH and AWR on DB12c

SQL_ID Specific AWR Report

Page 40: ASH and AWR on DB12c

• More defined reporting• No need to pull full report• Detail on waits that are of interest• Join to non-AWR objects

• Examples and Ideas…

Querying ASH Data Directly

Page 41: ASH and AWR on DB12c

• SAMPLE_ID- This is a unique identifier within an ASH sample.• SAMPLE_TIME- A unit of time used by Active Session History, (not to be confused with DB_TIME)• USER_ID- Identifier for a user that’s executing the session.• SESSION_ID- Same as the SID or Session ID and can be used to join to SID in other views/tables.• SESSION_STATE- What was the state of the session when ASH recorded the sample.• ON CPU/WAITING- The two session states in Active Session History. ON CPU is active, vs.

Waiting, which is self-explanatory.• EVENT- Type of event that the session is currently active or waiting on.• TIME_WAITED- How long the session has been waiting if waiting.• WAIT_TIME- Confusing- but this is populated by any wait time if the session is currently active and

for the previous waits.• SQL_ID- The unique identifier for the SQL statement being executed.• SQL_CHILD_NUMBER-The cursor child number.

V$ACTIVE_SESSION_HISTORY

Page 42: ASH and AWR on DB12c

Select ROUND(RATIO_TO_REPORT(SUM(1)) OVER () * 100 ,2) PERCENTAGE,ash.session_type SESS_TYPE, session_state STATUS, decode(nvl(sql_id,'-1'),'-1','nonsql','sql') SQL_TYPE, count(distinct to_char(session_id)|| to_char(session_serial#)) SESS_CNTfrom v$active_session_history ashwhere sample_time > sysdate - 30/(24*60) and ( ( ash.session_state = 'ON CPU’ ) or ( ash.session_type != 'BACKGROUND' ))group by ash.session_type, ash.session_state, decode(nvl(sql_id,'-1'),'-1','nonsql','sql')order by count(*)/

Session Averages

Page 43: ASH and AWR on DB12c

Session Avg. Output• Note the % of Background processes

Page 44: ASH and AWR on DB12c

Inspecting Whatselect * from (select ash.SQL_ID , ash.SQL_PLAN_HASH_VALUE Plan_hash, aud.name type, sum(decode(ash.session_state,'ON CPU',1,0)) "CPU", sum(decode(ash.session_state,'WAITING',1,0)) "WAITING", sum(decode(ash.session_state,'WAITING', decode(wait_class, 'User I/O',1,0),0)) "IO WAIT" , sum(decode(ash.session_state,'WAITING', decode(wait_class, 'User I/O',1,0),0)) "IO" , sum(decode(ash.session_state,'WAITING', decode(wait_class, 'Concurrency',1,0))) "CONCURRENCY" , sum(decode(ash.session_state,'WAITING', decode(wait_class, 'Application',1,0))) "Application" , sum(decode(ash.session_state,'ON CPU',1,1)) "TOTAL"from v$active_session_history ash, audit_actions aud where SQL_ID is not NULL and ash.sql_opcode=aud.action and ash.sample_time > sysdate - &minutes /( 60*24)group by sql_id, SQL_PLAN_HASH_VALUE , aud.name order by sum(decode(session_state,'ON CPU',1,1)) desc) where rownum < 5;

Page 45: ASH and AWR on DB12c

10 Min. View of Waits by SQL_ID• Choose Time in Minutes To Review, (10 in our

example)• SQL_ID and Plan Hash Value Shown• Waits for CPU, Wait, IO Wait and others.

Page 46: ASH and AWR on DB12c

Quantity of Events Occurred Over Small Amounts of Time

Col event for a50select event, count(1)from v$active_session_historywhere sample_time between to_date('21-FEB-14 01.43.00 PM','dd-MON-yy hh:mi:ss PM') and to_date('21-FEB-15 01.53.00 PM','dd-MON-yy hh:mi:ss PM')group by eventorder by event;

Page 47: ASH and AWR on DB12c

Results, Where to Focus?

Page 48: ASH and AWR on DB12c

Transaction Wait Detailselect to_char(sample_time,'HH:MI') st, substr(event,0,20) event, ash.session_id sid, mod(ash.p1,16) lm, ash.p2, ash.p3, nvl(o.object_name,ash.current_obj#) objn, substr(o.object_type,0,10) otype, CURRENT_FILE# fn, CURRENT_BLOCK# blockn, ash.SQL_ID, BLOCKING_SESSION bsidfrom v$active_session_history ash, all_objects owhere event like 'enq: TX%' and o.object_id (+)= ash.CURRENT_OBJ# and sample_time > sysdate - 10/(60*24)order by sample_time;

Page 49: ASH and AWR on DB12c

Transaction Lock Output What TX row locks are occurring!

Page 50: ASH and AWR on DB12c

Knowing What’s in the ASH BufferDeters from making assumptions on what data is being

queried.Know your samples!

Page 51: ASH and AWR on DB12c

Wait Events Across Nodes

Page 52: ASH and AWR on DB12c

Query top 10 SQL_ID’s in the last 10 minutes?

Page 53: ASH and AWR on DB12c

SQL_ID and CPU Usage

Page 54: ASH and AWR on DB12c

IO Waits by Object from ASH

Page 55: ASH and AWR on DB12c

SQL Text with ASHSQL for most recent five minutes of sample data from ASH

Page 56: ASH and AWR on DB12c

SQL ResultsSQL_ID, SQL Text, Sample Time that Process was captured

in.

Page 57: ASH and AWR on DB12c

Graphing From the CLI, via Kyle Hailey-

Page 58: ASH and AWR on DB12c

Formatting and Setupaccept hours prompt "hours (default 12) : " default 12 select &hours f_hours from dual;select 3600 f_secs from dual;select &v_secs f_samples from dual;select 30 f_graph from dual;select to_char(to_date(tday||' '||tmod*&v_secs,'YYMMDD SSSSS'),'DD-MON HH24:MI:SS') tm, samples npts,total/&samples aas, substr(substr(substr(rpad('+',round((cpu*&v_bars)/&samples),'+') || rpad('-',round((waits*&v_bars)/&samples),'-') || rpad(' ',p.value * &v_bars,' '),0,(p.value * &v_bars)) || p.value || substr(rpad('+',round((cpu*&v_bars)/&samples),'+') || rpad('-',round((waits*&v_bars)/&samples),'-') || rpad(' ',p.value * &v_bars,' '),(p.value * &v_bars),10) ,0,30) ,0,&v_graph)graph,total,cpu, waits from (

URL to Kyle Hailey’s Original, Fully Formatted Query

Page 59: ASH and AWR on DB12c

select to_char(sample_time,'YYMMDD')tday , trunc(to_char(sample_time,'SSSSS')/&v_secs) tmod , sum(decode(session_state,'ON CPU',1,decode(session_type,'BACKGROUND',0,1))) total , (max(sample_id) - min(sample_id) + 1 ) samples , sum(decode(session_state,'ON CPU' ,1,0)) cpu , sum(decode(session_type,'BACKGROUND',0,decode(session_state,'WAITING',1,0))) waits from v$active_session_history where sample_time > sysdate - &v_hours/24 group by trunc(to_char(sample_time,'SSSSS')/&v_secs), to_char(sample_time,'YYMMDD')union all select to_char(sample_time,'YYMMDD')tday, trunc(to_char(sample_time,'SSSSS')/&v_secs) tmod , sum(decode(session_state,'ON CPU',10,decode(session_type,'BACKGROUND',0,10))) total , (max(sample_id) - min(sample_id) + 1 ) samples, sum(decode(session_state,'ON CPU' ,10,0)) cpu , sum(decode(session_type,'BACKGROUND',0,decode(session_state,'WAITING',10,0))) waitsfrom dba_hist_active_sess_history where sample_time > sysdate - &v_hours/24 and sample_time < (select min(sample_time) from v$active_session_history) group by trunc(to_char(sample_time,'SSSSS')/&v_secs), to_char(sample_time,'YYMMDD')) ash, v$parameter pwhere p.name='cpu_count'order by to_date(tday||' '||tmod*&v_secs,'YYMMDD SSSSS'); **Thanks to Kyle Hailey for this great graph via the CLI

Page 60: ASH and AWR on DB12c

Pivot the Wait Events

Page 61: ASH and AWR on DB12c

Digging into History• DBA_HIST_ACTIVE_SESS_HISTORY

SNAP_ID SAMPLE_ID SAMPLE_TIME SESSION_ID USER_ID SQL_ID WAIT_CLASS SESSION_STATE PGA_ALLOCATED

Page 62: ASH and AWR on DB12c

Process InformationSELECT * FROM ( SELECT /*+ PARALLEL */ count(*) AS count, user_id, program, module, sql_id FROM SYS.DBA_HIST_ACTIVE_SESS_HISTORY WHERE sample_time > TO_DATE('19-FEB-2014 03.00.00 PM','dd-MON-yy hh:mi:ss PM') AND sample_time < TO_DATE('19-FEB-2014 08.00.00 PM','dd-MON-yy hh:mi:ss PM') AND program LIKE 'oracle@%' GROUP BY user_id, program, module, machine, sql_id ORDER BY count(*) desc)WHERE rownum <= 20/

Page 63: ASH and AWR on DB12c

Results of Process History

Page 64: ASH and AWR on DB12c

Tyler Muth ASH Mining Query

Page 65: ASH and AWR on DB12c

ASH Mining Output

Additional Options:• Physical Read Averages• Physical Writes, (Max/Averages)• Redo Info• Login Info• Hard Parsing, etc.

Page 66: ASH and AWR on DB12c

Best Practice When Querying ASH Data

Keep it Simple and don’t reinvent the wheel. Again- samples are an alias for time, not for counts. Understand what is valuable and compare to packaged

reports. Be aware on RAC of node specific data. Take care when querying Obj#, File# and Block#, (still issues

in different versions…) Check the time that is available in buffer, don’t assume!

Page 67: ASH and AWR on DB12c

• One More way to identify performance issues.• Monitoring view ease for those less familiar with database performance.

SQL Monitor, EM12c Style

Page 68: ASH and AWR on DB12c

SQL Monitor Dashboard

Status of Statement

Wait EventsDegree of Parallelism

SQL_ID

SQL Text

Page 69: ASH and AWR on DB12c

• Drill down to specific statement within SQL Monitor will display offload efficiency per statement.

Exadata and Offloading

Page 70: ASH and AWR on DB12c

Full Detail of SQL Execution

Page 71: ASH and AWR on DB12c

View Report

Page 72: ASH and AWR on DB12c

SET LONG 1000000SET LONGCHUNKSIZE 1000000SET LINESIZE 1000SET PAGESIZE 0SET TRIM ONSET TRIMSPOOL ONSET ECHO OFFSET FEEDBACK OFF

SELECT DBMS_SQLTUNE.report_sql_monitor( sql_id => '5vh6y3b7tnv8r', type => 'TEXT', report_level => 'ALL') AS reportFROM dual;

SQL Monitor Report via the Command Line Interface

Page 73: ASH and AWR on DB12c

Text Output of SQL Monitor

Page 74: ASH and AWR on DB12c

One of the Best & Least Used Features in Enterprise Manager: Search SQL

Problem Query

Page 75: ASH and AWR on DB12c

4v2tsp8dz0nhn is our SQL_IDGo to the EM Console, (Example is EM12c)

We Have the SQL_ID, What Next?

Page 76: ASH and AWR on DB12c

Choose AWR Snapshots, (change Time Period), AWR Baselines and put SQL_ID

Search SQL Interface

Page 77: ASH and AWR on DB12c

SQL_ID link for SQL Details Split up by tabs for Cursor, AWR, Baselines and SQL Tuning Sets Plan Hash Value Elapsed Time

Click on Search

Page 78: ASH and AWR on DB12c

Snapshot Data

Page 79: ASH and AWR on DB12c

Using the information provided by Search SQL, locate the correct plan hash value to create a profile from.

Identify

Page 80: ASH and AWR on DB12c

SQL Details

Page 81: ASH and AWR on DB12c

AWR Report or Run ADDM Report

Page 82: ASH and AWR on DB12c

Baseline Impact?

Third Tab contains Baseline Information and links to verify if implemented.

Page 83: ASH and AWR on DB12c

• Tyler Muth: http://tylermuth.wordpress.com/• Kyle Hailey, John Beresniewicz, Graham Wood: http://ashmasters.com/• Mine- “For the Love of ASH and AWR” http

://dbakevlar.com/2011/02/for-the-love-of-awr-and-ash/• Using AWR Reports:

http://dbakevlar.com/2015/01/working-with-awr-reports-from-em12c/• How to Use an ASH Report:

http://dbakevlar.com/2015/02/how-to-use-an-ash-report-and-why/• SQL ID Specific Performance Information:

http://dbakevlar.com/2015/05/sql-id-specific-performance-information/

AWR/ASH Links/Blogs

Page 85: ASH and AWR on DB12c

Q&A

Thank you!