New Features 1. Metrics 2. Wait Classes 3. Time Model 4. ASH 5. AWR ( DBA_HIST_ ) 6. ADDM 7. Misc
Part I
Eat your Spinach
(Hold on to the seat of your pants )
Metrics a new 10g feature to make our lives easier 1. Metrics 2. Wait Classes 3. Time Model 4. ASH 5. AWR ( DBA_HIST_ ) 6. ADDM 7. Misc
Part I
Part II
Part III
Motivation
What inspired Metrics? Why should you care ?
With Statistics
BAD
1,533,787
30 minutes
IOs
30 minutes
time
time
Current Methods
Oracle 6 Utlbstat.sql/Utlestat.sql
Creates tables, inserts, deletes Improvement, but needs to be set up and administered (by guess who)
YOUR TIME
Automated Immediate Always there Time saving (whose time? YOUR time)
Metrics
dependability at your fingertips
Pre-Set intervals
Ratios Percentages
Statistics
Files
V$FILEMETRIC ( 10 minutes)
x$kewrtsqlstat (30 Minutes) not a metric cumulates values up to 30 minutes, then snapshots it to dba_hist_sqlstat
BAD
3 IO/sec
30 minutes
1,533,787
513 IO/sec
IOs
30 minutes
time
time
Little IO
High rate Lots of IO
delta
delta delta
60 secs
60 secs
60 secs
60 secs
60 secs
60 secs
60 secs
Statistics
File IO
Waits
V$WAITCLASSMETRIC_HISTORY ( 60 seconds)
delta
delta delta
60 secs
60 secs
60 secs
60 secs
60 secs
60 secs
60 secs
Statistics
Waits
File IO
SQL
DBA_HIST_SQLSTAT
EM Exposing Metrics
Current deltas : Metrics Tables Hour History : Metric History Tables Week of History : DBA_HIST Tables
Statistics
Raw : v$sysstat Current Rates: v$sysmetric 15 & 60 seconds
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 Executions
hour
Per Second and Transaction Per Sec User Commits User Rollbacks User Transaction DBWR Checkpoints Background Checkpoints Network Traffic Volume Per Transaction
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 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% .
Response Time
No History
END_TIME
INTSIZE_CSEC SESSION_ID SESSION_SERIAL_NUM CPU PHYSICAL_READS PGA_MEMORY HARD_PARSES SOFT_PARSES PHYSICAL_READ_PCT LOGICAL_READ_PCT
Statistics Metrics
v$metricgroup
GROUP_ID NAME INTERVAL_SIZE
v$sysstat
v$sessmetric
BEGIN_TIME END_TIME INTSIZE_CSEC SESSION_ID SESSION_SERIAL_NUM CPU PHYSICAL_READS STATISTIC# NAME CLASS VALUE HASH
v$sysmetric_history
BEGIN_TIME END_TIME INTSIZE_CSEC GROUP_ID METRIC_ID METRIC_NAME VALUE METRIC_UNIT
MAX_INTERVAL
PGA_MEMORY
v$sessstat
STATISTIC# NAME CLASS VALUE HASH
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$metricname
GROUP_ID GROUP_NAME METRIC_ID METRIC_NAME METRIC_UNIT
LOGICAL_READ_PCT
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
BEGIN_TIME
Type
DATE
---------------------------------- ------
END_TIME
INTSIZE_CSEC EVENT#
DATE
NUMBER NUMBER
EVENT_ID
NUM_SESS_WAITING TIME_WAITED WAIT_COUNT
NUMBER
NUMBER NUMBER NUMBER
v$eventmetric results
NAME pmon timer process startup rdbms ipc message control file sequential read control file parallel write log file parallel write SQL*Net message to client SQL*Net more data to client SQL*Net message from client SQL*Net more data from client queue messages Queue Monitor Wait Queue Monitor Task Wait WAITERS TIME_WAITED WAIT_COUNT 1 0 7 0 0 0 0 0 4 0 2 1 0 5875 13 41104 0 2 0 0 1 14721 0 12012 3000 0 20 1 168 10 20 1 47 4 47 1 24 1 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 208 04:12:16 2 600 04:02:18 04:02:18
03:52:15 03:52:15
1 2
1 2
600 189
1922 2082
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
V$METRIC V$METRIC_HISTORY
Combined view onto the other metric tables
Current Values
V$SYSMETRIC V$SESSMETRIC V$FILEMETRIC V$EVENTMETRIC V$WAITCLASSMETRIC V$SVCMETRIC
Week of History
dba_hist_sysmetric_summary dba_hist_system_event (cumulative) dba_hist_filemetric_history (alerts)
Last Hour
V$sysmetric
v$filemetric
1 Hour
V$sysmetric_history V$sysmetric_summary
v$waitclassmetric_history
v$filemetric_history
7 days DBA_HIST_*
Wait Classes 1. Metrics 2. Wait Classes 3. Time Model 4. ASH 5. AWR ( DBA_HIST_ ) 6. ADDM 7. Misc
Part I
Part II
Part III
Wait Classes
Administrative (39) Configuration (20)
Application (11)
log file size Enqueues: ST, HW, ITL Latch: redo copy,shared pool
Concurrency (12)
Idle (56) Network (25) System I/O (19) Scheduler (6) User I/O (12) Other (485)
Wait Classes in EM
cumulative
v$waitclassmetric
Current rates
v$waitclassmetric_history
Waits Metrics
Cumulative Current deltas
v$waitclassmetric
BEGIN_TIME
Last Hour
v$waitclassmetric_history
BEGIN_TIME END_TIME INTSIZE_CSEC WAIT_CLASS_ID WAIT_CLASS# NUM_SESS_WAITING TIME_WAITED WAIT_COUNT
Last 7 days
dba_hist_ waitclassmetric_history
Only gets populated with alerts
Wait Classes
v$system_wait_class
WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS TOTAL_WAITS TIME_WAITED
END_TIME
INTSIZE_CSEC WAIT_CLASS_ID WAIT_CLASS# NUM_SESS_WAITING TIME_WAITED WAIT_COUNT
v$event_name
EVENT# EVENT_ID NAME PARAMETER1 PARAMETER2 PARAMETER3 WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS
Wait Events
v$system_event
EVENT TOTAL_WAITS TOTAL_TIMEOUTS TIME_WAITED AVERAGE_WAIT TIME_WAITED_MICRO EVENT_ID
v$eventmetric
BEGIN_TIME END_TIME INTSIZE_CSEC EVENT_ID NUM_SESS_WAITING TIME_WAITED WAIT_COUNT
dba_hist_system_event (Cumulative)
No in memory history
Time Model 1. Metrics 2. Wait Classes 3. Time Model 4. ASH 5. AWR ( DBA_HIST_ ) 6. ADDM 7. Misc
Part I
Part II
Part III
Time Model
New concept DB Time Total time for all database calls cpu time wait time
Total Time
DB Wait Time
Parse Time
Hard Parse
hard parse hard (sharing parse criteria) elapse elapsed d time time
ASH 1. Metrics 2. Wait Classes 3. Time Model 4. ASH 5. AWR ( DBA_HIST_ ) 6. ADDM 7. 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
More active, more data collected Less active, less data collected It self adjusts for your needs 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
v$active_session_history
SAMPLE_ID SAMPLE_TIME NUMBER TIMESTAMP(3)
When
Session
State Wait
SQL
Duration
Consumers
Top Session Top User Top SQL Top Object Top Module.Action Top Program Top Service Top Client Top Wait
SESSION_ID COUNT(*) ---------- ---------265 236 264 115 257 52 271 22 276 1
v$session_wait
v$active_session_history
V$session_wait_history
wrh$active_session_history
ASH Tables
current
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
10 samples
SID SEQ# EVENT# EVENT P1TEXT P1 P2TEXT P2 P3TEXT P3 WAIT_TIME SAMPLE_ID SAMPLE_TIME SESSION_ID
hour
7 days (disk)
1 in 10
wrh$active_session_history
SNAP_D DBID INSTANCE_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
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
v$event_name
EVENT_ID
EVENT# EVENT_ID NAME PARAMETER1 PARAMETER2 PARAMETER3 WAIT_CLASS_ID
WAIT_CLASS#
WAIT_CLASS
AWR 1. Metrics 2. Wait Classes 3. Time Model 4. ASH 5. AWR ( DBA_HIST_ ) 6. ADDM 7. Misc
Part I
Part II
Part III
Snapshoting
BEGIN DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT (); END; /
DBA_HIST
DBA_HIST_DATABASE_INSTANCE DBA_HIST_SNAPSHOT - DBA_HIST_SNAP_ERROR - DBA_HIST_BASELINE - DBA_HIST_WR_CONTROL ? (work load repository ?) - DBA_HIST_DATAFILE DBA_HIST_FILESTATXS only file number, no name - DBA_HIST_TEMPFILE DBA_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_NAME DBA_HIST_SYSTEM_EVENT DBA_HIST_BG_EVENT_SUMMARY sum of backgrounds DBA_HIST_WAITSTAT DBA_HIST_ENQUEUE_STAT -DBA_HIST_LATCH_NAME DBA_HIST_LATCH DBA_HIST_LATCH_CHILDREN DBA_HIST_LATCH_PARENT DBA_HIST_LATCH_MISSES_SUMMARY summed over parent latch DBA_HIST_LIBRARYCACHE DBA_HIST_DB_CACHE_ADVICE DBA_HIST_BUFFER_POOL_STAT DBA_HIST_ROWCACHE_SUMMARY summed over rowcache entries DBA_HIST_SGA DBA_HIST_SGASTAT DBA_HIST_PGASTAT
DBA_HIST_RESOURCE_LIMIT DBA_HIST_SHARED_POOL_ADVICE ?DBA_HIST_SQL_WORKAREA_HSTGRM DBA_HIST_PGA_TARGET_ADVICE DBA_HIST_INSTANCE_RECOVERY DBA_HIST_JAVA_POOL_ADVICE DBA_HIST_THREAD - logswitches -DBA_HIST_STAT_NAME DBA_HIST_SYSSTAT -DBA_HIST_SYS_TIME_MODEL -DBA_HIST_OSSTAT_NAME -DBA_HIST_OSSTAT DBA_HIST_PARAMETER_NAME DBA_HIST_PARAMETER DBA_HIST_UNDOSTAT DBA_HIST_ROLLSTAT DBA_HIST_SEG_STAT DBA_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 alert DBA_HIST_DLM_MISC -DBA_HIST_RCVRY_FILE_DEST_STAT -DBA_HIST_RMAN_PERFORMANCE -DBA_HIST_ACTIVE_SESS_HISTORY every 10th point from v$active_ses -DBA_HIST_TABLESPACE_STAT -DBA_HIST_LOG DBA_HIST_MTTR_TARGET_ADVICE -DBA_HIST_TBSPC_SPACE_USAGE - ?
New in 10g
ADDM 1. Metrics 2. Wait Classes 3. Time Model 4. ASH 5. AWR ( DBA_HIST_ ) 6. ADDM 7. Misc
Part I
Part II
Part III
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
BBW: Read & write contention on a block Findings
Segment Tuning
Recommendations
objects
Tables
Rational
SQL objects
Rational
Doesnt use type ADDM does not use this connection (maybe SQL Tuning Advisor ) 22 types of which ADDM uses 7: SQL DATABASE OBJECT (Tables, Indexes, ...) TABLESPACE DATABASE BLOCK DATABASE FILE DATABASE LATCH DATABASE ENQ
objects
Miscellaneous 1. Metrics 2. Wait Classes 3. Time Model 4. ASH 5. AWR ( DBA_HIST_ ) 6. ADDM 7. 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
Ids
Name Hash
Wait Histograms
V$event_histogram 1ms to 1 hour buckets 23 buckets < 1 ms, < 2 ms, < 4 ms, < 8 ms, ..., < 2^22 ms
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
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
Scott John
Sue
Mike
Randy
Tim
Mary
Oracle Sessions
S1
S2
S3
S4
S4
S5
S6
Sue
Mike
Randy
Tim
Mary
SQL_TRACE=TRUE
Oracle Sessions
S1
S2
S3
S4
S4
S5
S6
Sue
Mike
Randy
Tim
Mary
APP Server 1
S1, sql_trace=true Oracle Sessions
S1
S2
S3
S4
S4
S5
S6
S7
Session Pooling
Scott John
Sue
Mike
Randy
Tim
Mary
APP Server 1
Oracle Sessions
S1
S2
S3
S4
S4
S5
S6
S7
Now
V$sysmetric
ASH x$kewrtsqlstat
1 Hour
V$sysmetric_history V$sysmetric_summary
v$waitclassmetric_history
ASH
7 days DBA_HIST_*
SYS_TIME_MODEL (cumulative)
SQLSTAT
Metrics
V$sessmetric
-----------------
-----------------
-----------------
Metrics history
-----------------
-----------------
-----------------
-----------------
-----------------
AWR
----------------
-----------------
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$ash
SQL> desc x$kewash ADDR INDX INST_ID SAMPLE_ID SAMPLE_TIME SAMPLE_ADDR SAMPLE_LENGTH ROW_COUNT desc x$ash RAW(4) NUMBER NUMBER NUMBER TIMESTAMP(3) NUMBER NUMBER NUMBER
ADDR INDX INST_ID SAMPLE_ADDR SAMPLE_ID SAMPLE_TIME SESSION_ID SESSION_SERIAL# USER_ID SQL_ID SQL_CHILD_NUMBER SQL_PLAN_HASH_VALUE SERVICE_HASH SESSION_TYPE SQL_OPCODE QC_SESSION_ID QC_INSTANCE_ID CURRENT_OBJ# CURRENT_FILE# CURRENT_BLOCK# SEQ# EVENT# P1 P2 P3 WAIT_TIME TIME_WAITED PROGRAM MODULE ACTION CLIENT_ID RAW(4) NUMBER NUMBER NUMBER NUMBER TIMESTAMP(3) NUMBER NUMBER NUMBER VARCHAR2(13) NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER VARCHAR2(48) VARCHAR2(48) VARCHAR2(32) VARCHAR2(64)
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 Pages Layout
Home Page
Perf Page
ADDM
Top Session
Wait Detail
Top SQL
ADDM Details
SQL Detail
Session Detail
Three Paths
Home Page
Perf Page
ADDM
Top Session
Wait Detail
Top SQL
ADDM Details
SQL Detail
Session Detail
ADDM Path
Home Page
Perf Page
ADDM
Top Session
Wait Detail
Top SQL
ADDM Details
SQL Detail
Session Detail
ADDM Home
Home Page
Perf Page
ADDM
Top Session
Wait Detail
Top SQL
ADDM Details
SQL Detail
Session Detail
ADDM Home
ADDM Details
Home Page
Perf Page
ADDM
Top Session
Wait Detail
Top SQL
ADDM Details
SQL Detail
Session Detail
ADDM Details
Manual Path
Home Page
Perf Page
ADDM
Top Session
Wait Detail
Top SQL
ADDM Details
SQL Detail
Session Detail
Performance Page
Home Page
Perf Page
ADDM
Top Session
Top SQL
Wait Detail
ADDM Details
SQL Detail
Session Detail
Perf Page
ADDM
Top Session
Wait Detail
Top SQL
ADDM Details
SQL Detail
Session Detail
SQL Details
Home Page
Perf Page
ADDM
Top Session
Wait Detail
Top SQL
ADDM Details
SQL Detail
Session Detail
SQL Details
Combined
Home Page
Perf Page
ADDM
Top Session
Wait Detail
Top SQL
ADDM Details
SQL Detail
Session Detail
Comparison