performance tuning in oracle 10g feel the power ! kyle hailey kyle.hailey@oracle.com

Post on 27-Dec-2015

316 Views

Category:

Documents

18 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Performance Tuning in Oracle 10g

Feel the Power !

Kyle HaileyKyle.hailey@oracle.com

http://oraperf.sourceforge.net

New Features

1.Metrics2.Wait Classes3.Time Model4.ASH5.AWR ( DBA_HIST_ )

6.ADDM7.Misc

Part I

Eat your Spinach(Hold on to the seat of your

pants … )

Part II

Wow – the main course

Part III

Dessert – this is cool(And that’s not all)

Metrics … a new 10g feature to make our lives easier

1.Metrics2.Wait Classes3.Time Model4.ASH5.AWR ( DBA_HIST_ )

6.ADDM7.Misc

Part I

Part II

Part III

Motivation

What inspired Metrics?Why should you care ?

Eating your Spinach

How do we find Performance Problems

– With StatisticsStatistics have always been a

Pain– How do YOU find bottlenecks with

statistics?YOU DO THE MATH This is TEDIOUS

– (and your boss probably doesn’t even appreciate you for it )

First Tedious Step

SQL> Select value from v$sysstat where name=‘physical reads’;

VALUE --------------- 1,533,787

Not much help …Why? Let see …

This tells you … Nothing

1,533,787

IO’s

time

30 minutes

30 minutes

time

GOOD BAD

How do You find the Delta?

Where’s the Beef ?

YOU Need to do MATH to find Out

Take value at time A Take value at time BDelta = (B-A) orRate = (B-A)/elapsed

time

Current Methods Oracle 6 Utlbstat.sql/Utlestat.sql

– Creates tables, inserts, deletes

Oracle 8 introduced Statspack– Improvement, but needs to be set up and

administered (by guess who)

Another Option Write your own Scripts

– Take time to write, no standards

In Summary These options take time … whose time?

YOUR TIME

Solution ! 10g Metrics

Available Immediately at your fingertips … for your enjoyment and relaxation,

Introducing Metrics– Automated– Immediate– Always there– Time saving (whose time? … YOUR time)

Metrics dependability at your fingertips

Pre-Set intervals– 15 second– 60 second– 10 minutes– 30 minutes

Current Value for – Deltas– Rates

per second per transaction

– Ratios – Percentages

Serious Geek Stuff :Our Metric Family

Wait Events– V$EVENTMETRIC (60 secs )– V$WAITCLASSMETRIC (60 secs)

Statistics– V$SESSMETRIC (15 secs Deltas)– V$SYSMETRIC (15 and 60 secs deltas)

Files– V$FILEMETRIC ( 10 minutes)

SQL (the secret is out)– x$kewrtsqlstat (30 Minutes) “not a metric” cumulates

values up to 30 minutes, then snapshots it to dba_hist_sqlstat

The Solution Table v$sysmetric

SQL> desc v$sysmetric BEGIN_TIME END_TIME INTSIZE_CSEC GROUP_ID METRIC_ID METRIC_NAME VALUE METRIC_UNIT

Now What’s the IO?

No Calculations, just a simple select :

SQL> Select VALUE , METRIC_UNIT

from v$sysmetric

where name=‘Physical Reads’

/

(Gives per second and per transaction)

Answer at your fingertips

3 IO/sec

IO’s

time

30 minutes

30 minutes

time

GOOD BAD

513 IO/sec

1,533,787X

We solved what’s Happening now… but

What if your problem happened 10 minutes ago?

How do we get History? What happened in the past?

More work, Time and calculations by YOU

That was now. What was then?

High rate

Lots of IO

Low rate

Little IO

v$sysstat

physical reads

Solution! Metric History Tables

Last 60 minutes of history, in memory

v$sysstat

physical reads

60 secs 60 secs 60 secs 60 secs 60 secs 60 secs 60 secs

delta

delta

delta

delta

deltadeltadelta

Family of Metric History Tables

At your fingertips :

Statistics– V$SYSMETRIC_HISTORY (60 seconds) (including 3 minutes of 15 second history

as a bonus!)

File IO– V$FILEMETRIC_HISTORY (10 minutes)

Waits– V$WAITCLASSMETRIC_HISTORY ( 60 seconds)

1 hour of 60 second deltas

v$sysstat

physical reads

60 secs 60 secs 60 secs 60 secs 60 secs 60 secs 60 secs

delta

delta

delta

delta

deltadeltadelta

That’s not all Folks, as a bonus:

3 Minutes 15 second deltas

v$sysstat

physical reads

3 minutes of 15 second deltas

Both Stored in Same Table v$sysmetric_history

Not saved to disk but summary is

60 minutes of 1 minute deltas

3 minutes of 15 second deltas

What was IO 30 minutes ago?

SQL> Select VALUE , METRIC_UNIT

from v$sysmetric_history

where METRIC_NAME = ‘Physical Reads’ and END_TIME < ( sysdate - (30/(24*60)))

and END_TIME > ( sysdate - (35/(24*60)))

/

Once again the answer is at your fingertips

How about a 2 days ago?Long Term History, 7 days

Statistics– DBA_HIST_SYSMETRIC_SUMMARY– DBA_HIST_SYSMETRIC_HISTORY (alerts)– DBA_HIST_SYSSTAT (cumulative)

Waits– WAITCLASSMETRIC_HISTORY (alerts) – DBA_HIST_SYSTEM_EVENT (cumulative)

File IO– DBA_HIST_FILEMETRIC_HISTORY (alerts)– DBA_HIST_FILESTATXS (cumulative)

SQL– DBA_HIST_SQLSTAT

EM Exposing Metrics

That was the Introduction to Metrics

We saw– Current deltas : Metrics Tables– Hour History : Metric History Tables– Week of History : DBA_HIST Tables

Now lets Look at the Groupings– Statistics– Waits– File I/O

Statistics

• Raw : v$sysstat• Current Rates: v$sysmetric 15 & 60 seconds

• 15 Second • 60 Second• Session Stats

• 1 Hour : v$sysmetric_history (in memory)

• 7 Days : dba_hist_sysmetric_summary (with AWR)

v$sysmetric 15 Secs for 3 minutes

Buffer Cache Hit Ratio

Memory Sorts Ratio

Execute Without Parse Ratio

Soft Parse Ratio

Database CPU Time Ratio

Library Cache Hit Ratio

Shared Pool Free %

Txns Per Logon

Physical Reads

Physical Writes

Physical Reads Direct

Redo Generated

Logons

User Calls

Logical Reads

Redo Writes

Total Table Scans

Full Index Scans

DB Block Gets

Consistent Read Gets

DB Block Changes

Consistent Read Changes

ExecutionsUser Transaction Per Sec

Per Sec and Per Transaction

Per Sec

v$sysmetric 60 Sec for an hour

Buffer Cache Hit Ratio

Memory Sorts Ratio

Redo Allocation Hit Ratio

User Commits Percentage

User Rollbacks Percentage

Cursor Cache Hit Ratio

Rows Per Sort

Execute Without Parse Ratio

Soft Parse Ratio

User Calls Ratio

Global Cache Average CR Get Time

Global Cache Average Current Get Time

Global Cache Blocks Corrupted

Global Cache Blocks Lost

Current Logons Count

Current Open Cursors Count

User Limit %

SQL Service Response Time

Database Wait Time Ratio

Database CPU Time Ratio

Row Cache Hit Ratio

Row Cache Miss Ratio

Library Cache Hit Ratio

Library Cache Miss Ratio

Shared Pool Free %

PGA Cache Hit %

Process Limit %

Session Limit %

Txns Per Logon

v$sysmetric 60 Sec rates sec/txn for an hour

Physical Reads

Physical Writes

Physical Reads Direct

Physical Writes Direct

Physical Reads Direct Lobs

Physical Writes Direct Lobs

Redo Generated

Logons

Open Cursors

User Calls

Recursive Calls

Logical Reads

Redo Writes

Long Table Scans

Total Table Scans

Full Index Scans

Total Index Scans

Total Parse Count

Hard Parse Count

Parse Failure Count

User Commits

User Rollbacks

User Transaction

DBWR Checkpoints

Background Checkpoints

Network Traffic Volume

Response Time

Disk Sort

Enqueue Timeouts

Enqueue Waits

Enqueue Deadlocks

Enqueue Requests

DB Block Gets

Consistent Read Gets

DB Block Changes

Consistent Read Changes

CPU Usage

CR Blocks Created

CR Undo Records Applied

User Rollback Undo Records Applied

Leaf Node Splits

Branch Node Splits

PX downgraded 1 to 25%

PX downgraded 25 to 50%

PX downgraded 50 to 75%

PX downgraded 75 to 99%

.

Per Second and Transaction

Per Sec

Per Transaction

v$sessmetric: Session Metric

V$sessmetricBEGIN_TIME

END_TIME

INTSIZE_CSEC

SESSION_ID

SESSION_SERIAL_NUM

CPU

PHYSICAL_READS

PGA_MEMORY

HARD_PARSES

SOFT_PARSES

PHYSICAL_READ_PCT

LOGICAL_READ_PCT

• No History

• Only a one 15 second Delta

Statistics Metrics

v$sessmetricBEGIN_TIME

END_TIME

INTSIZE_CSEC

SESSION_ID

SESSION_SERIAL_NUM

CPU

PHYSICAL_READS

PGA_MEMORY

HARD_PARSES

SOFT_PARSES

PHYSICAL_READ_PCT

LOGICAL_READ_PCTv$metricname GROUP_ID GROUP_NAME METRIC_ID METRIC_NAME METRIC_UNIT

v$sysmetric_summary BEGIN_TIME END_TIME INTSIZE_CSEC -> intsize GROUP_ID METRIC_ID METRIC_NAME NUM_INTERVAL MAXVAL MINVAL AVERAGE STANDARD_DEVIATION METRIC_UNIT

v$sysmetric_historyBEGIN_TIME

END_TIME

INTSIZE_CSEC

GROUP_ID

METRIC_ID

METRIC_NAME

VALUE

METRIC_UNIT

v$sysmetric BEGIN_TIME END_TIME INTSIZE_CSEC GROUP_ID METRIC_ID METRIC_NAME VALUE METRIC_UNIT v$sysstat

STATISTIC# NAME CLASS VALUE HASH

Stats Family of Tables

v$metricgroup GROUP_ID

NAME

INTERVAL_SIZE

MAX_INTERVAL

v$sessstat STATISTIC# NAME CLASS VALUE HASH

Waits

• Raw : v$system_event• Current Deltas : v$eventmetric (60 seconds)• 1 Hour : n/a• 7 Days : dba_hist_system_event (cumulative)

Desc v$eventmetric

SQL> desc v$eventmetric

Name Type

---------------------------------- ------

BEGIN_TIME DATE

END_TIME DATE

INTSIZE_CSEC NUMBER

EVENT# NUMBER

EVENT_ID NUMBER

NUM_SESS_WAITING NUMBER

TIME_WAITED NUMBER

WAIT_COUNT NUMBER

Select from v$eventmetric

SQL> select en.name name, num_sess_waiting WAITERS, time_waited, wait_count from v$eventmetric em, v$event_name en where wait_count > 0 and en.event# = em.event# /

v$eventmetric results

NAME WAITERS TIME_WAITED WAIT_COUNT

------------------------------ ---------- ----------- ----------

pmon timer 1 5875 20

process startup 0 13 1

rdbms ipc message 7 41104 168

control file sequential read 0 0 10

control file parallel write 0 2 20

log file parallel write 0 0 1

SQL*Net message to client 0 0 47

SQL*Net more data to client 0 1 4

SQL*Net message from client 4 14721 47

SQL*Net more data from client 0 0 1

queue messages 2 12012 24

Queue Monitor Wait 1 3000 1

Queue Monitor Task Wait 0 0 1

Files

• Raw : v$fileio• Current Delta : v$filemetric ( 10 Minutes)• 1 Hour : v$filemetric_history ( 1 hour, 7

points)• 7 Days : dba_hist_filemetric_history (alerts

only)

V$FILEMETRIC_HISTORY

SQL> select BEGIN_TIME,FILE_ID, PHYSICAL_READS

from V$FILEMETRIC_HISTORY;

BEGIN_TI FILE_ID PHYSICAL_READS-------- ---------- --------------04:12:16 1 20804:12:16 2 600

04:02:18 1 60004:02:18 2 189

03:52:15 1 192203:52:15 2 2082

... For the last hour

Metrics – in summary

Current rates automatically calculated

History of Rates for an hour in memory

History kept for a week on disk

Metrics V$METRICGROUP V$METRICNAME

Current Values V$SYSMETRIC V$SESSMETRIC V$FILEMETRIC V$EVENTMETRIC V$WAITCLASSMETRIC V$SVCMETRIC

Last Hour V$SYSMETRIC_HISTORY V$FILEMETRIC_HISTORY V$WAITCLASSMETRIC_HISTORY V$SVCMETRIC_HISTORY

V$SYSMETRIC_SUMMARY – avg, std dev, max, min

V$METRICV$METRIC_HISTORY

Combined view onto the other metric tables

Week of History dba_hist_sysmetric_summary dba_hist_system_event (cumulative) dba_hist_filemetric_history (alerts)

Metrics Family of TablesStats ( V$stat_name) Waits ( V$event_name ) Files

Raw V$sysstat v$system_event

v$event_histogram

v$system_wait_class

v$fileio

Now

v$metricgroupv$metricname

V$sysmetric v$eventmetric

v$waitclassmetric

v$filemetric

1 Hour

V$sysmetric_history V$sysmetric_summary

v$waitclassmetric_history v$filemetric_history

7 days

DBA_HIST_*

SYSMETRIC_SUMMARY

SYSSTAT (cumulative)

SYSMETRIC_HISTORY (alerts)

SYSTEM_EVENT(cumulative)

WAITCLASSMETRIC_HISTORY (alert) FILESTATXS (cumulative)

TEMPSTATXS (cumulative)

FILEMETRIC_HISTORY (alert)

Wait Classes

1.Metrics2.Wait Classes3.Time Model4.ASH5.AWR ( DBA_HIST_ )

6.ADDM7.Misc

Part I

Part II

Part III

Wait Classes Administrative (39)

– switch logfile– rebuild index

Application (11)– enqueues – sqlnet break/reset

Cluster (113)

Commit (1)– Log file Sync

Concurrency (12)– Latches: cbc, lbc,– Lib cache locks– Buffer busy wait

Configuration (20)– log file size– Enqueues: ST, HW, ITL– Latch: redo copy,shared pool

Idle (56)

Network (25)

System I/O (19)

Scheduler (6)

User I/O (12)

Other (485)

Wait Classes in EM

Wait Class Tables

v$system_wait_class– cumulative

v$waitclassmetric – Current rates

v$waitclassmetric_history

– Hour of rates (60 second intervals)

v$waitclassmetricBEGIN_TIME

END_TIME

INTSIZE_CSEC

WAIT_CLASS_ID

WAIT_CLASS#

NUM_SESS_WAITING

TIME_WAITED

WAIT_COUNT

Waits Metrics

v$waitclassmetric_history BEGIN_TIME

END_TIME

INTSIZE_CSEC

WAIT_CLASS_ID

WAIT_CLASS#

NUM_SESS_WAITING

TIME_WAITED

WAIT_COUNT

v$eventmetric BEGIN_TIME END_TIME INTSIZE_CSEC EVENT_ID NUM_SESS_WAITING TIME_WAITED WAIT_COUNT

v$event_name EVENT#

EVENT_ID

NAME

PARAMETER1

PARAMETER2

PARAMETER3

WAIT_CLASS_ID

WAIT_CLASS#

WAIT_CLASS

v$system_wait_classWAIT_CLASS_ID

WAIT_CLASS#

WAIT_CLASS

TOTAL_WAITS

TIME_WAITED

v$system_eventEVENT

TOTAL_WAITS

TOTAL_TIMEOUTS

TIME_WAITED

AVERAGE_WAIT

TIME_WAITED_MICRO

EVENT_ID

No in memory history

dba_hist_system_event

(Cumulative)

dba_hist_waitclassmetric_history

Only gets populated with alerts

Wait Classes

Wait Events

Cumulative Current deltas Last Hour Last 7 days

Time Model

1.Metrics2.Wait Classes3.Time Model4.ASH5.AWR ( DBA_HIST_ )

6.ADDM7.Misc

Part I

Part II

Part III

Time Model

New concept• DB Time

Total time for all database calls• cpu time • wait time

Time Model areas Total Time CPU Elapsed Time SQL execution Plsql execution (sql execute subtracted

out) Java execution Connection time

Time Model Components1) background elapsed time      2) background cpu time

1) DB time     2) DB CPU     2) connection management call elapsed time     2) sequence load elapsed time     2) sql execute elapsed time     2) parse time elapsed           3) hard parse elapsed time                4) hard parse (sharing criteria) elapsed time                     5) hard parse (bind mismatch) elapsed time           3) failed parse elapsed time                4) failed parse (out of shared memory) elapsed time     2) PL/SQL execution elapsed time     2) inbound PL/SQL rpc elapsed time     2) PL/SQL compilation elapsed time     2) Java execution elapsed time

Total Time

Total Database Time

Total and CPU

DB CPU Time

=~ DB Wait Time

Total and CPU and Parse Time

DB CPU Time

DB Wait

Time

Parse Elapsed

Time

Parse Time

Parse Elapsed

Time

Hard Parse

Parse

time

elapsed

hard parse elapsed time

Hard Parse Sharing Criteria

Parse

time

elapsed

hard parse elapsed time

hard parse

(sharing criteria) elapsed

time

Hard Parse Bind Mismatch

Parse

time

elapsed

hard parse elapsed time

hard parse

(sharing criteria) elapsed

time

hard parse (bind

mismatch)

elapsed time

Time Model TablesCurrent cumulative values V$SYS_TIME_MODEL V$SESS_TIME_MODEL

AWR Snapshots of cumulative values DBA_HIST_SYS_TIME_MODEL

ASH

1.Metrics2.Wait Classes3.Time Model4.ASH5.AWR ( DBA_HIST_ )

6.ADDM7.Misc

Part I

Part II

Part III

ASH A Revolution in Monitoring

Active Session History New 10g Every Second it collects data 1 hour of history in Memory for

immediate access at your fingertips

This hour of data could change your life

It’s a Revolution and it’s an Evolution

Oracle 6 … ie the dark ages … there was Cache Buffer Hit Ratio

Oracle 7 … turned the lights on … Wait Events … hallelujah I can see the light

Oracle 10g … ASH has landed

ASH – Intelligence for the new

Millennium

Selectively Collects Data– More active, more data collected – Less active, less data collected– It self adjusts for your needs

Old methods collect everything – Costly– Limits fine Granularity

ASH – In Memory

Collects active session data only History v$session_wait + v$session +

extras• Circular Buffer - 1M to 128M (~2% of SGA)

• Flushed every hour to disk or when buffer 2/3 full

ASH Sizing … Bigger isn’t always Better

Avg row around 150bytes 3600 secs in an hour ~ ½ Meg per Active Session per hour That’s generally over an hour of ASH

v$active_session_history

SESSION_ID NUMBER SESSION_SERIAL# NUMBER USER_ID NUMBER SERVICE_HASH NUMBER SESSION_TYPE VARCHAR2(10) PROGRAM VARCHAR2(64) MODULE VARCHAR2(48) ACTION VARCHAR2(32) CLIENT_ID VARCHAR2(64)

EVENT VARCHAR2(64) EVENT_ID NUMBER EVENT# NUMBER SEQ# NUMBER P1 NUMBER P2 NUMBER P3 NUMBER WAIT_TIME NUMBER TIME_WAITED NUMBER CURRENT_OBJ# NUMBER CURRENT_FILE# NUMBER CURRENT_BLOCK# NUMBER0

SQL_ID VARCHAR2(13) SQL_CHILD_NUMBER NUMBER SQL_PLAN_HASH_VALUE NUMBER SQL_OPCODE NUMBER QC_SESSION_ID NUMBER QC_INSTANCE_ID NUMBER

SAMPLE_ID NUMBER SAMPLE_TIME TIMESTAMP(3) When

Session

SQL

Wait

SESSION_STATE VARCHAR2(7) WAIT_TIME NUMBER State

TIME_WAITED NUMBER

Duration

Consumers Top Session Top User Top SQL Top Object Top Module.Action Top Program Top Service Top Client Top Wait

X

• CPU• Waits

• Event• I/O

• File• Block

• Time

Top CPU Session Top CPU Session in last 5 minutes

Select session_id, count(*)

from v$active_session_history

where session_state= ‘ON CPU‘ and SAMPLE_TIME > sysdate – (5/(24*60))

group by session_id

order by count(*) desc;

Results Top CPU Session

SESSION_ID COUNT(*) ---------- ---------- 265 236 264 115 257 52 271 22 276 1

ASH in OEM 10g

Family of ASH Tables

v$session_wait

v$active_session_history

wrh$active_session_history

V$session_wait_history

ASH Tables

v$session_wait SID

SEQ#

EVENT

P1TEXT

P1

P1RAW

P2TEXT

P2

P2RAW

P3TEXT

P3

P3RAW

WAIT_CLASS_ID

WAIT_CLASS#

WAIT_CLASS

WAIT_TIME

SECONDS_IN_WAIT

STATE

v$session_wait_history SID

SEQ#

EVENT#

EVENT

P1TEXT

P1

P2TEXT

P2

P3TEXT

P3

WAIT_TIME

v$event_nameEVENT_ID

EVENT#

EVENT_ID

NAME

PARAMETER1

PARAMETER2

PARAMETER3

WAIT_CLASS_ID

WAIT_CLASS#

WAIT_CLASS

v$active_session_historySAMPLE_ID

SAMPLE_TIME

SESSION_ID

SESSION_SERIAL#

USER_ID

SQL_ID

SQL_CHILD_NUMBER

SQL_PLAN_HASH_VALUE

SQL_OPCODE

SERVICE_HASH

SESSION_TYPE

SESSION_STATE

QC_SESSION_ID

QC_INSTANCE_ID

SEQ#

EVENT#

P1

P2

P3

WAIT_TIME

TIME_WAITED

CURRENT_OBJ#

CURRENT_FILE#

CURRENT_BLOCK#

PROGRAM

MODULE

ACTION

CLIENT_ID

current 10 samples hour

wrh$active_session_historySNAP_D

DBIDINSTANCE_NUMBER

SAMPLE_ID

SAMPLE_TIME

SESSION_ID

SESSION_SERIAL#

USER_ID

SQL_ID

SQL_CHILD_NUMBER

SQL_PLAN_HASH_VALUE

SQL_OPCODE

SERVICE_HASH

SESSION_TYPE

SESSION_STATE

QC_SESSION_ID

QC_INSTANCE_ID

SEQ#

EVENT_ID

P1

P2

P3

WAIT_TIME

TIME_WAITED

CURRENT_OBJ#

CURRENT_FILE#

CURRENT_BLOCK#

PROGRAM

MODULE

ACTION

CLIENT_ID

7 days (disk)1 in 10

AWR

1.Metrics2.Wait Classes3.Time Model4.ASH5.AWR ( DBA_HIST_ )

6.ADDM7.Misc

Part I

Part II

Part III

Automatic Workload Repository Statspack on Steroids More efficient than Statspack Keeps stats every hour Stores by default the last 7 days

Snapshoting

BEGINDBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();END;

/

DBA_HISTDBA_HIST_DATABASE_INSTANCEDBA_HIST_SNAPSHOT- DBA_HIST_SNAP_ERROR- DBA_HIST_BASELINE- DBA_HIST_WR_CONTROL ? (work load repository ?)- DBA_HIST_DATAFILEDBA_HIST_FILESTATXS – only file number, no name- DBA_HIST_TEMPFILEDBA_HIST_TEMPSTATXS – onl;y file number+DBA_HIST_SQLSTAT group by parent cursor plus DELTAs was (stats$sql_summary)DBA_HIST_SQLTEXT+DBA_HIST_SQL_SUMMARY – identify litterals (was stat$sql_statistics)DBA_HIST_SQL_PLAN-DBA_HIST_SQLBIND-DBA_HIST_OPTIMIZER_ENV-DBA_HIST_EVENT_NAMEDBA_HIST_SYSTEM_EVENTDBA_HIST_BG_EVENT_SUMMARY – sum of backgroundsDBA_HIST_WAITSTATDBA_HIST_ENQUEUE_STAT-DBA_HIST_LATCH_NAMEDBA_HIST_LATCHDBA_HIST_LATCH_CHILDRENDBA_HIST_LATCH_PARENTDBA_HIST_LATCH_MISSES_SUMMARY – summed over parent latchDBA_HIST_LIBRARYCACHEDBA_HIST_DB_CACHE_ADVICEDBA_HIST_BUFFER_POOL_STATDBA_HIST_ROWCACHE_SUMMARY – summed over rowcache entriesDBA_HIST_SGADBA_HIST_SGASTATDBA_HIST_PGASTAT

DBA_HIST_RESOURCE_LIMITDBA_HIST_SHARED_POOL_ADVICE?DBA_HIST_SQL_WORKAREA_HSTGRMDBA_HIST_PGA_TARGET_ADVICEDBA_HIST_INSTANCE_RECOVERYDBA_HIST_JAVA_POOL_ADVICEDBA_HIST_THREAD - logswitches-DBA_HIST_STAT_NAMEDBA_HIST_SYSSTAT-DBA_HIST_SYS_TIME_MODEL-DBA_HIST_OSSTAT_NAME-DBA_HIST_OSSTATDBA_HIST_PARAMETER_NAMEDBA_HIST_PARAMETERDBA_HIST_UNDOSTATDBA_HIST_ROLLSTATDBA_HIST_SEG_STATDBA_HIST_SEG_STAT_OBJ-DBA_HIST_METRIC_NAME-DBA_HIST_SYSMETRIC_HISTORY alert-DBA_HIST_SYSMETRIC_SUMMARY – max, min, avg standard deviation-DBA_HIST_SESSMETRIC_HISTORY alert-DBA_HIST_FILEMETRIC_HISTORY alert-DBA_HIST_WAITCLASSMET_HISTORY alertDBA_HIST_DLM_MISC-DBA_HIST_RCVRY_FILE_DEST_STAT-DBA_HIST_RMAN_PERFORMANCE-DBA_HIST_ACTIVE_SESS_HISTORY – every 10th point from v$active_session_history-DBA_HIST_TABLESPACE_STAT-DBA_HIST_LOGDBA_HIST_MTTR_TARGET_ADVICE-DBA_HIST_TBSPC_SPACE_USAGE - ?

New in 10g

ADDM

1.Metrics2.Wait Classes3.Time Model4.ASH5.AWR ( DBA_HIST_ )

6.ADDM7.Misc

Part I

Part II

Part III

Automatic Database Diagnostic Monitor

Every Hour with AWR Analyze Identify problems Proposes solutions

ADDM Page

ADDM Details

ADDM Advice

ADDM tables

dba_advisor_findings     TASK_NAME, TASK_ID (is indexed)

dba_advisor_recommendations  TASK_ID,FINDING_ID

dba_advisor_actions          TASK_ID and REC_ID

dba_advisor_rationale        TASK_ID and REC_ID

dba_advisor_objects  TASK_ID , OBJECT_ID from actions or rationale.

ADDM tables

Actions

Findings

Recommendations

objects

Rational

Add Free lists or move to ASSM

SQL

BBW:

Read & write contention

on a block

Segment Tuningobjects Tables

Advisory Framework tables

Actions

Findings

Recommendations

objects

Rational

Could be just a message w/o command or rational

Like investigate application logic

22 types of which ADDM uses 7:SQLDATABASE OBJECT (Tables, Indexes, ...)TABLESPACEDATABASE BLOCKDATABASE FILEDATABASE LATCHDATABASE ENQ

ADDM does not use this connection

(maybe SQL Tuning Advisor )

Types:

PROBLEM

SYMPTOM

INFORMATION

Types:

Application Analysis

DB Configuration

Host Configuration

SQL Tuning

Segment Tuning

Schema

Doesn’t use type

Miscellaneous

1.Metrics2.Wait Classes3.Time Model4.ASH5.AWR ( DBA_HIST_ )

6.ADDM7.Misc

Part I

Part II

Part III

Miscellaneous

Field naming conventions Wait Improvements

– Wait histograms– Waits in v$session and v$sql– Waits broken out for latches and locks– Waits show the blocker– Wait history of last 10 waits

Services Client Id

Fields Names

Names– Event– Statistic– Waitclass

Ids – Event#– Statistic#– Waitclass#

Name Hash– Event_id– Statistic_id– Waitclass_id

Wait Histograms

V$event_histogram 1ms to 1 hour buckets 23 buckets < 1 ms, < 2 ms, < 4 ms, < 8 ms, ..., < 2^22 ms

Waits in v$session and v$sql V$session exposes all the fields from

v$session_wait SEQ# NUMBER EVENT# NUMBER EVENT VARCHAR2(64) P1TEXT VARCHAR2(64) P1 NUMBER P1RAW RAW(4) P2TEXT VARCHAR2(64) P2 NUMBER P2RAW RAW(4) P3TEXT VARCHAR2(64) P3 NUMBER P3RAW RAW(4) WAIT_CLASS_ID NUMBER WAIT_CLASS# NUMBER WAIT_CLASS VARCHAR2(64) WAIT_TIME NUMBER SECONDS_IN_WAIT NUMBER STATE VARCHAR2(19)

V$SQL SQL_FULLTEXT SQL_ID FETCHES END_OF_FETCH_COUNT DIRECT_WRITES APPLICATION_WAIT_TIME CONCURRENCY_WAIT_TIME CLUSTER_WAIT_TIME USER_IO_WAIT_TIME PLSQL_EXEC_TIME JAVA_EXEC_TIME CPU_TIME ELAPSED_TIME

Wait Types Broken Out

800 waits Latches broken out

– Ex) Latch: library cache latch

Enqueues broken out– Ex) Enq: HW - contention

Waits show Blocking Session

V$session. BLOCKING_SESSION -> can build a wait tree:

Waits History of last 10 waits

select sid, event, p1,p2,p3 from v$session_wait_history

SID EVENT P1 P2 P3---------- --------------------------- ---------- ---------- ---------- 36 db file sequential read 1 953 1 36 SQL*Net message from client 1413697536 1 0 36 SQL*Net message from client 1413697536 1 0 36 SQL*Net message to client 1413697536 1 0 36 db file sequential read 1 658 1 36 db file sequential read 1 828 1 36 db file sequential read 1 569 1 36 db file sequential read 1 827 1 36 db file sequential read 1 19199 1 36 db file sequential read 1 29 1

Services

Services is a new way to measure resource usage and statistics. A session is associated with a services when the session connects to the database via the listener.

Client Id

Setting Client ID dbms_session.set_identifier (client_id); Enabling trace for a client ID dbms_monitor.client_id_trace_enable (client_id, TRUE, FALSE); Enabling statistics aggregation by client id dbms_monitor.client_id_stat_enable (client_id);• Script to Extract Client Trace

trcsess

Session Dedicated

Oracle Database Host

Oracle

SessionsS1 S2 S3 S4 S4 S5 S6

Scott John Sue Mike Randy Tim Mary

Session Dedicated trace

Oracle Database Host

Oracle

SessionsS1 S2 S3 S4 S4 S5 S6

Scott John Sue Mike Randy Tim Mary

SQL_TRACE=TRUE

Session Pooling trace

Oracle Database Host

APP Server

1

Oracle

SessionsS1 S2 S3 S4 S4 S5 S6 S7

Scott John Sue Mike Randy Tim Mary

S1, sql_trace=true

Session Pooling

Oracle Database Host

APP Server

1

Oracle

SessionsS1 S2 S3 S4 S4 S5 S6 S7

Scott John Sue Mike Randy Tim Mary

Set client_id = SCOTT

dbms_monitor.client_id_trace_enable (client_id, TRUE, FALSE); waits, binds

------ Reference -------------

System Statistics ViewStats ( V$stat_name) Waits ( V$event_name ) Time Model sql

Raw V$sysstat v$system_event

v$event_histogram

v$system_wait_class

v$sys_time_model V$sql

Now V$sysmetric v$eventmetric

v$waitclassmetric Some goes into sysmetric

ASH

x$kewrtsqlstat

1 Hour

V$sysmetric_history V$sysmetric_summary

v$waitclassmetric_history ASH

7 days

DBA_HIST_*

SYSMETRIC_SUMMARY

SYSSTAT

(cumulative)

SYSMETRIC_HISTORY (alerts)

SYSTEM_EVENT

(cumulative)

WAITCLASSMETRIC_HISTORY (alert)

SYS_TIME_MODEL

(cumulative)

SQLSTAT

Session Statistics Viewstats waits waitclasses Time Model sql

V$ V$sessstat V$session_event ---------------- V$sess_time_model *

-----------------

(some stats possible from ASH)

Metrics V$sessmetric ----------------- ----------------- ----------------- -----------------

Metrics

history

----------------- ----------------- ----------------- ----------------- -----------------

AWR WRH$_SESSMETRIC_HISTORY *(alert only)

-----------------

(some stats possible from ASH)

---------------- ----------------- -----------------

(some stats possible from ASH)

V$metric

v$metric

BEGIN_TIME

END_TIME

INTSIZE_CSEC

GROUP_ID

ENTITY_ID – session id, wait_class_id, etc

ENTITY_SEQUENCE

METRIC_ID

METRIC_NAME

VALUE

METRIC_UNIT

ASH

ASH provides two x$ fixed tables

x$kewash - returns a row for every ASH sample taken

x$ash- returns a row for every active session in every ASH sample

SELECT /*+ no_merge ordered use_nl(s,a) */ a.inst_id, a.sample_id, a.sample_tim

e, a.session_id, a.session_serial#, a.user_id, a.sql_id, a.sql_child_number,

a.sql_plan_hash_value, a.sql_opcode, a.service_hash, decode(a.session_type, 1,'FORE

GROUND', 2,'BACKGROUND', 'UNKNOWN'), decode(a.wait_time, 0, 'WAITING', 'ON CPU')

, a.qc_session_id, a.qc_instance_id, a.seq#, a.event#, a.p1, a.p2, a.p3, a.wait_

time, a.time_waited, a.current_obj#, a.current_file#, a.current_block#, a.progra

m, a.module, a.action, a.client_id FROM x$kewash s, x$ash a WHERE s.sample_addr

= a.sample_addr and s.sample_id = a.sample_id

No range scans on x$ tables, so full scan x$kewash and then use equality in query on x$ash

X$ Desc x$ashSQL> desc x$kewash ADDR RAW(4) INDX NUMBER INST_ID NUMBER SAMPLE_ID NUMBER SAMPLE_TIME TIMESTAMP(3) SAMPLE_ADDR NUMBER SAMPLE_LENGTH NUMBER ROW_COUNT NUMBER

desc x$ash ADDR RAW(4) INDX NUMBER INST_ID NUMBER SAMPLE_ADDR NUMBER SAMPLE_ID NUMBER SAMPLE_TIME TIMESTAMP(3) SESSION_ID NUMBER SESSION_SERIAL# NUMBER USER_ID NUMBER SQL_ID VARCHAR2(13) SQL_CHILD_NUMBER NUMBER SQL_PLAN_HASH_VALUE NUMBER SERVICE_HASH NUMBER SESSION_TYPE NUMBER SQL_OPCODE NUMBER QC_SESSION_ID NUMBER QC_INSTANCE_ID NUMBER CURRENT_OBJ# NUMBER CURRENT_FILE# NUMBER CURRENT_BLOCK# NUMBER SEQ# NUMBER EVENT# NUMBER P1 NUMBER P2 NUMBER P3 NUMBER WAIT_TIME NUMBER TIME_WAITED NUMBER PROGRAM VARCHAR2(48) MODULE VARCHAR2(48) ACTION VARCHAR2(32) CLIENT_ID VARCHAR2(64)

Sql metrics: x$kewrtsqlstat

x$kewrtsqlstat

INIT.ORA ASH _ash_enable = false; [ A dynamic parameter will turn off

ASH sampling, flushing and the V$ views on ASH ] ADDM _addm_auto_enable = false; [ A dynamic parameter to

turn off automatic ADDM runs after every AWR snapshot ] AWR "_swrf_mmon_flush" = FALSE ; AWR metrics "_swrf_mmon_metrics" = FALSE ; METRICS DB Feature Usage "_swrf_mmon_dbfus" = FALSE ; DB Feature Usage "_swrf_on_disk_enabled" = FALSE ; disable all (on disk,

including manual) AWR operations:

EM Product Layout for Performance

Database Home Page

Database Performance Page

Drilldowns

SQL Session

EM Pages Layout

Home Page

Perf Page

Top Session Wait Detail Top SQL

SQL Detail Session Detail

ADDM

ADDM Details

Buffer Busy Waits Use Case

Home Page

Perf Page

Top Session Wait Detail Top SQL

SQL Detail Session Detail

ADDM

ADDM Details

Three Paths

ADDM Path

Home Page

Perf Page

Top Session Wait Detail Top SQL

SQL Detail Session Detail

ADDM

ADDM Details

Database Home Page

ADDM Home

Home Page

Perf Page

Top Session Wait Detail Top SQL

SQL Detail Session Detail

ADDM

ADDM Details

ADDM Home

ADDM Details

Home Page

Perf Page

Top Session Wait Detail Top SQL

SQL Detail Session Detail

ADDM

ADDM Details

ADDM Details

Home Page

Perf Page

Top Session Wait Detail Top SQL

SQL Detail Session Detail

ADDM

ADDM Details

Manual Path

Database Home Page

Database Home Page

Database Home Page

Performance Page

Home Page

Perf Page

Top Session Top SQL Wait Detail

SQL Detail Session Detail

ADDM

ADDM Details

Database Performance Page

Database Performance Page highlight

Wait Drill Down

Home Page

Perf Page

Top Session Wait Detail Top SQL

SQL Detail Session Detail

ADDM

ADDM Details

Wait Drill Down

Wait Drill Down

Wait Drill Down

Wait Drill Down highlight

Wait Drill Down – Top SQL

SQL Details

Home Page

Perf Page

Top Session Wait Detail Top SQL

SQL Detail Session Detail

ADDM

ADDM Details

SQL Details

Combined

Home Page

Perf Page

Top Session Wait Detail Top SQL

SQL Detail Session Detail

ADDM

ADDM Details

Comparison

top related