SlideShare a Scribd company logo
1 of 84
Download to read offline
© 2016 Pythian 1
Mining AWR V2
Trend Analysis
MARIS ELSINS
Lead Database Consultant
Can you read
the line below?
Can you read the line below?
This is the font size I use for
listing code in slides!
© 2016 Pythian 2
Maris Elsins
Lead Database Consultant
At Pythian since 2011
Located in Riga, Latvia
Oracle [Apps] DBA since 2005
Speaker at conferences since 2007
@MarisDBA elsins@pythian.com
http://bit.ly/getMOSPatchV2
© 2016 Pythian 3
ABOUT PYTHIAN
Pythian’s 400+ IT professionals
help companies adopt and
manage disruptive technologies
to better compete
© 2016 Pythian 4
Systems currently
managed by Pythian
EXPERIENCED
Pythian experts
in 35 countries
GLOBAL
Millennia of experience
gathered and shared
over 19 years
EXPERTS
11,800 2400
© 2016 Pythian 5
• “1-Dot” Philosophy •
• “2-Dots” Philosophy • •
• Data trends in AWR
• Examples
AGENDA
© 2016 Pythian 6
LET'S OVERSIMPLIFY
WHAT IS AN AWR REPORT?
It's a dot !
•
© 2016 Pythian 7
LET'S OVERSIMPLIFY
SERIOUSLY? A DOT???
Are you gone totally nuts?
Photo by herr_hartmann / CC BY-NC 2.0
© 2016 Pythian 8
• AWR Report gives you valuable drill-down capabilities
(time interval):
– Top Wait Events
– Top SQL Statements in different categories
– Top Segments by Logical Reads
– ...
LET'S OVERSIMPLIFY
AWR REPORT AS A "DOT"! THINK ABOUT IT!
© 2016 Pythian 9
DOTS AND AWR - LET'S INVESTIGATE!
HOW DID THE IO PERFORM ON SEPTEMBER 9? - AWR REPORT IS THE ANSWER!
© 2016 Pythian 10
LET'S OVERSIMPLIFY
AWR REPORT AS A "DOT"! THINK ABOUT IT!
• Lot of resource usage / performance information is
aggregated down to a single number
(a "dot" on a time/value graph)
– How much time was spent waiting on User I/O? = 42189 s
– How quickly did the db file sequential reads respond? = 0.84 ms
– How many transactions per second are completed? = 47.09
© 2016 Pythian 11
LET'S OVERSIMPLIFY
DB FILE SEQUENTIAL READS PERFORMANCE AS A "DOT"
Time
Resp.
time
09-Sep-16
0.84 ms
© 2016 Pythian 12
"The FBI Academy teaches new agents that the
best predictor of future behavior is past behavior."
Ronald Kessler
Who doesn't want to be an FBI agent
specializing in database performance analysis?
A “dot” doesn't reveal the past behaviour
WHY THIS IS IMPORTANT?
© 2016 Pythian 13
1-DOT
What does it tell us about how things develop over time?
Time
Value
S1
V1
© 2016 Pythian 14
DOTS AND AWR
COMPARING TWO PERIODS OF TIME (AWR DIFF REPORT)
© 2016 Pythian 15
What does it tell us about how things develop over time?
2-DOTS
Time
Value
S1
V1
V2
S2
© 2016 Pythian 16
2-DOTS
What does it tell us about how things develop over time?
Time
Value
S1
V1
V2
S2
© 2016 Pythian 17
DOTS AND AWR
• An AWR report describes the time interval between 2 snapshots i.e.
– How much time was spent on CPU?
– How many buffer gets did a particular query do?
– How many Physical IOs did a top query do?
– ... etc ...
• A single aggregated value, that describes the reporting
interval, which is insufficient for trend analysis
© 2016 Pythian 18
IS IT WORTH MINING AWR?
Trends in AWR
© 2016 Pythian 19
MINING DATA TRENDS IN AWR
• Each AWR snapshot represents a moment in time.
• Multitude of statistics are saved for each snapshot
• It's an obvious thing to graph these values!
• And the best about it is you pick the metric to graph!
© 2016 Pythian 20
SQL> @awr_wait_trend.sql "db file sequential read" 10 1
TIME (SNAP) EVENT_NAME TOTAL_WAITS TOTAL_TIME_S AVG_TIME_MS
------------------- ---------------------------------------------------------------- --------------- -------------- --------------
....
09.09.2016 00:00:00 db file sequential read 55302 50.670 .916
09.09.2016 01:00:00 db file sequential read 45372 31.303 .690
09.09.2016 02:00:00 db file sequential read 80171 68.995 .861
09.09.2016 03:00:00 db file sequential read 215704 235.555 1.092
09.09.2016 04:00:00 db file sequential read 67104 46.547 .694
09.09.2016 05:00:00 db file sequential read 172241 104.396 .606
09.09.2016 06:00:00 db file sequential read 65497 36.598 .559
09.09.2016 07:00:00 db file sequential read 76487 46.231 .604
09.09.2016 08:00:00 db file sequential read 53193 27.399 .515
09.09.2016 09:00:00 db file sequential read 78568 45.846 .584
09.09.2016 10:00:00 db file sequential read 88612 48.192 .544
09.09.2016 11:00:00 db file sequential read 71483 42.597 .596
09.09.2016 12:00:00 db file sequential read 79741 53.432 .670
09.09.2016 13:00:00 db file sequential read 89707 65.399 .729
09.09.2016 14:00:00 db file sequential read 85208 49.717 .583
09.09.2016 15:00:00 db file sequential read 125878 99.274 .789
09.09.2016 16:00:00 db file sequential read 71224 39.754 .558
09.09.2016 17:00:00 db file sequential read 78324 46.832 .598
09.09.2016 18:00:00 db file sequential read 72536 67.021 .924
09.09.2016 19:00:00 db file sequential read 49199 37.167 .755
09.09.2016 20:00:00 db file sequential read 47840 26.727 .559
...
DOTS AND AWR
HOW DID THE IO PERFORM ON SEPTEMBER 9?
© 2016 Pythian 21
DOTS AND AWR
HOW DID THE IO PERFORM ON SEPTEMBER 9?
© 2016 Pythian 22
DOTS AND AWR
DO YOU STILL REMEMBER THIS PICTURE?
© 2016 Pythian 23
DOTS AND AWR
HOW DID THE IO PERFORM BETWEEN SEPTEMBER 2 AND 9?
© 2016 Pythian 24
DOTS AND AWR
TOTAL WAITS COMPARISON BETWEEN SEPTEMBER 2 AND 9?
© 2016 Pythian 25
DOTS AND AWR
RESPONSE TIME COMPARISON BETWEEN SEPTEMBER 2 AND 9?
© 2016 Pythian 26
HOW DID I DO IT?
Extracting the “Past Behaviour” from AWR
© 2016 Pythian 27
Information on the DBA_HIST_views can be found in
Oracle® Database Reference 12c Release 2 (12.2)
http://docs.oracle.com/database/122/REFRN/toc.htm
SELECT v.snap_id,
v.value
FROM dba_hist_sysstat v
WHERE v.stat_name = 'user commits'
ORDER BY v.snap_id;
SNAP_ID VALUE
---------- ----------
12621 625766
12622 626608
12623 627853
12624 629348
12625 630130
12626 630904
....
HOW DID I DO IT?
STEP 1: PICK THE METRIC AND FIND THE CORRECT DBA_HIST_% VIEW
© 2016 Pythian 28
SELECT Lag(snap_id) over (ORDER BY v.snap_id) from_snap,
v.snap_id to_snap,
v.value - Lag(v.value) over (ORDER BY v.snap_id) delta_value
FROM dba_hist_sysstat v
WHERE v.stat_name = 'user commits'
ORDER BY v.snap_id;
FROM_SNAP TO_SNAP DELTA_VALUE
---------- ---------- -----------
12621
12621 12622 842
12622 12623 1245
12623 12624 1495
12624 12625 782
12625 12626 774
...
HOW DID I DO IT?
STEP 2: CALCULATE DELTAS
© 2016 Pythian 29
SELECT Lag(s.end_interval_time) over (PARTITION BY s.dbid, s.startup_time ORDER BY v.snap_id) from_time,
s.end_interval_time to_time,
v.value - Lag(v.value) over (PARTITION BY s.dbid, s.startup_time ORDER BY v.snap_id) delta_value
FROM dba_hist_sysstat v,
dba_hist_snapshot s
WHERE v.stat_name = 'user commits'
AND s.snap_id = v.snap_id
ORDER BY s.end_interval_time;
FROM_TIME TO_TIME DELTA_VALUE
------------------------------- ------------------------------- -----------
09-SEP-16 04.00.44.539000000 PM
09-SEP-16 04.00.44.539000000 PM 09-SEP-16 05.00.58.620000000 PM 842
09-SEP-16 05.00.58.620000000 PM 09-SEP-16 06.00.22.386000000 PM 1245
09-SEP-16 06.00.22.386000000 PM 09-SEP-16 07.00.35.070000000 PM 1495
09-SEP-16 07.00.35.070000000 PM 09-SEP-16 08.00.45.075000000 PM 782
09-SEP-16 08.00.45.075000000 PM 09-SEP-16 09.00.54.573000000 PM 774
09-SEP-16 09.00.54.573000000 PM 09-SEP-16 10.00.04.401000000 PM 768
...
HOW DID I DO IT?
STEP 3: VIEWER FRIENDLY DATES
© 2016 Pythian 30
HOW DID I DO IT?
STEP 4: TIMELINE FILTERING
SELECT *
FROM (SELECT Lag(s.end_interval_time) over (PARTITION BY s.dbid, s.startup_time ORDER BY v.snap_id) from_time,
s.end_interval_time to_time,
v.value - Lag(v.value) over (PARTITION BY s.dbid, s.startup_time ORDER BY v.snap_id) delta_value
FROM dba_hist_sysstat v,
dba_hist_snapshot s
WHERE v.stat_name = 'user commits'
AND s.snap_id = v.snap_id)
WHERE from_time BETWEEN To_date('11092016', 'DDMMYYYY') AND To_date('16092016', 'DDMMYYYY')
ORDER BY from_time;
FROM_TIME TO_TIME DELTA_VALUE
------------------------------- ------------------------------- -----------
11-SEP-16 12.00.05.638000000 AM 11-SEP-16 01.00.23.855000000 AM 785
11-SEP-16 01.00.23.855000000 AM 11-SEP-16 02.00.40.073000000 AM 1057
11-SEP-16 02.00.40.073000000 AM 11-SEP-16 03.00.46.109000000 AM 1096
...
15-SEP-16 09.00.04.192000000 PM 15-SEP-16 10.00.16.087000000 PM 786
15-SEP-16 10.00.16.087000000 PM 15-SEP-16 11.00.35.078000000 PM 779
15-SEP-16 11.00.35.078000000 PM 16-SEP-16 12.00.51.092000000 AM 831
© 2016 Pythian 31
HOW DID I DO IT?
STEP 5: AGGREGATION
SELECT Trunc(from_time, 'DD') t_from_time,
SUM(delta_value) sum_delta_value
FROM (SELECT Lag(s.end_interval_time) over (PARTITION BY s.dbid, s.startup_time ORDER BY v.snap_id) from_time,
s.end_interval_time to_time,
v.value - Lag(v.value) over (PARTITION BY s.dbid, s.startup_time ORDER BY v.snap_id) delta_value
FROM dba_hist_sysstat v,
dba_hist_snapshot s
WHERE v.stat_name = 'user commits'
AND s.snap_id = v.snap_id)
WHERE from_time BETWEEN To_date('11092016', 'DDMMYYYY') AND To_date('16092016', 'DDMMYYYY')
GROUP BY Trunc(from_time, 'DD')
ORDER BY t_from_time;
T_FROM_TIME SUM_DELTA_VALUE
------------------------------- ---------------
11.09.2016 00:00:00 21602
12.09.2016 00:00:00 29173
13.09.2016 00:00:00 32772
14.09.2016 00:00:00 30477
15.09.2016 00:00:00 26799
© 2016 Pythian 32
HOW DO I DO IT?
STEP 6: VISUALIZATION
© 2016 Pythian 33
EXAMPLE 1
SQL Performance
© 2016 Pythian 34
EXAMPLE 1
THE PROBLEM
• Amazon RDS for Oracle
– db.m3.xlarge (4 vCPU, 15GiB)
– 11.2.0.4
• Alert from the client
– Could you please take a look at the DB utilization in prod? We're
seeing 100% utilization and 795 connections. Could you please
let us know if any specific connection is causing high CPU
utilization.
© 2016 Pythian 35
EXAMPLE 1
5MIN ASH
10:21:04 SQL> @ashtop session_id,sql_id "event is null" sysdate-5/25/60 sysdate
Total
Seconds AAS %This SESSION_ID SQL_ID FIRST_SEEN LAST_SEEN ...
--------- ------- ------- ---------- ------------- ------------------- ------------------- ...
285 1.0 12% | 738 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ...
285 1.0 12% | 1336 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ...
285 1.0 12% | 1358 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ...
284 1.0 12% | 745 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ...
284 1.0 12% | 882 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ...
284 1.0 12% | 2046 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ...
99 .3 4% | 1472 grbz54xqkr425 2016-06-06 10:17:04 2016-06-06 10:18:43 ...
64 .2 3% | 1472 fy4c407vamaks 2016-06-06 10:18:52 2016-06-06 10:21:26 ...
37 .1 2% | 2176 2016-06-06 10:18:29 2016-06-06 10:19:50 ...
22 .1 1% | 977 7tdudtm4x03np 2016-06-06 10:16:40 2016-06-06 10:17:01 ...
16 .1 1% | 795 3b8s69ct88pur 2016-06-06 10:16:40 2016-06-06 10:18:13 ...
15 .1 1% | 989 2016-06-06 10:17:04 2016-06-06 10:17:19 ...
13 .0 1% | 632 gdhy97b59bk81 2016-06-06 10:16:46 2016-06-06 10:17:07 ...
11 .0 0% | 1792 2016-06-06 10:16:59 2016-06-06 10:21:09 ...
11 .0 0% | 2133 atmhpvm759a97 2016-06-06 10:16:50 2016-06-06 10:21:02 ...
Thank you, Tanel! http://blog.tanelpoder.com/files/scripts/ash/ashtop.sql
© 2016 Pythian 36
EXAMPLE 1
5MIN ASH
10:21:04 SQL> @ashtop session_id,sql_id "event is null" sysdate-5/25/60 sysdate
Total
Seconds AAS %This SESSION_ID SQL_ID FIRST_SEEN LAST_SEEN ...
--------- ------- ------- ---------- ------------- ------------------- ------------------- ...
285 1.0 12% | 738 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ...
285 1.0 12% | 1336 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ...
285 1.0 12% | 1358 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ...
284 1.0 12% | 745 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ...
284 1.0 12% | 882 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ...
284 1.0 12% | 2046 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ...
99 .3 4% | 1472 grbz54xqkr425 2016-06-06 10:17:04 2016-06-06 10:18:43 ...
64 .2 3% | 1472 fy4c407vamaks 2016-06-06 10:18:52 2016-06-06 10:21:26 ...
37 .1 2% | 2176 2016-06-06 10:18:29 2016-06-06 10:19:50 ...
22 .1 1% | 977 7tdudtm4x03np 2016-06-06 10:16:40 2016-06-06 10:17:01 ...
16 .1 1% | 795 3b8s69ct88pur 2016-06-06 10:16:40 2016-06-06 10:18:13 ...
15 .1 1% | 989 2016-06-06 10:17:04 2016-06-06 10:17:19 ...
13 .0 1% | 632 gdhy97b59bk81 2016-06-06 10:16:46 2016-06-06 10:17:07 ...
11 .0 0% | 1792 2016-06-06 10:16:59 2016-06-06 10:21:09 ...
11 .0 0% | 2133 atmhpvm759a97 2016-06-06 10:16:50 2016-06-06 10:21:02 ...
Thank you, Tanel! http://blog.tanelpoder.com/files/scripts/ash/ashtop.sql
© 2016 Pythian 37
Just one query to address!
How hard can it be?
EXAMPLE 1
SQL PERFORMANCE
© 2016 Pythian 38
EXAMPLE 1
THE EXECUTION PLAN
10:26:35 SQL> select * from table(dbms_xplan.display_awr('4db73upm43ck1',82218884));
Plan hash value: 82218884
--------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
--------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | | 54163 (100)| |
| 1 | TEMP TABLE TRANSFORMATION | | | | | | |
| 2 | LOAD AS SELECT | | | | | | |
| 3 | VIEW | | 179K| 13M| | 10337 (1)| 00:02:05 |
| 4 | HASH JOIN | | 179K| 9830K| 5800K| 10337 (1)| 00:02:05 |
| 5 | TABLE ACCESS FULL | LEARNING_IMPACT_BY_TOPIC | 179K| 3686K| | 794 (1)| 00:00:10 |
| 6 | TABLE ACCESS FULL | ACTIVE_USER_VIEWS_BY_TOPIC | 1543K| 51M| | 5823 (1)| 00:01:10 |
| 7 | VIEW | | 1 | 13 | | 2 (0)| 00:00:01 |
| 8 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 |
| 9 | LOAD AS SELECT | | | | | | |
| 10 | VIEW | | 110K| 8415K| | 10228 (1)| 00:02:03 |
| 11 | HASH JOIN | | 110K| 6042K| 3568K| 10228 (1)| 00:02:03 |
| 12 | TABLE ACCESS FULL | LEARNING_IMPACT_BY_TOPIC | 110K| 2265K| | 794 (1)| 00:00:10 |
| 13 | TABLE ACCESS FULL | ACTIVE_USER_VIEWS_BY_TOPIC | 1543K| 51M| | 5823 (1)| 00:01:10 |
| 14 | VIEW | | 1 | 13 | | 2 (0)| 00:00:01 |
| 15 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 |
...
1
© 2016 Pythian 39
EXAMPLE 1
THE EXECUTION PLAN
...
| 16 | LOAD AS SELECT | | | | | | |
| 17 | INTERSECTION | | | | | | |
| 18 | SORT UNIQUE | | 179K| 7021K| 8472K| 2359 (1)| 00:00:29 |
| 19 | VIEW | | 179K| 7021K| | 518 (1)| 00:00:07 |
| 20 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFD_AAF67829 | 179K| 4388K| | 518 (1)| 00:00:07 |
| 21 | SORT UNIQUE | | 110K| 4315K| 5208K| 1452 (1)| 00:00:18 |
| 22 | VIEW | | 110K| 4315K| | 319 (1)| 00:00:04 |
| 23 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFE_AAF67829 | 110K| 2697K| | 319 (1)| 00:00:04 |
| 24 | LOAD AS SELECT | | | | | | |
| 25 | WINDOW BUFFER | | 1 | 27 | | 860 (1)| 00:00:11 |
| 26 | HASH GROUP BY | | 1 | 27 | | 860 (1)| 00:00:11 |
| 27 | VIEW | | 110K| 2913K| | 856 (1)| 00:00:11 |
| 28 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFF_AAF67829 | 110K| 4315K| | 856 (1)| 00:00:11 |
| 29 | LOAD AS SELECT | | | | | | |
| 30 | WINDOW BUFFER | | 42 | 756 | | 523 (2)| 00:00:07 |
| 31 | HASH GROUP BY | | 42 | 756 | | 523 (2)| 00:00:07 |
| 32 | VIEW | | 179K| 3159K| | 518 (1)| 00:00:07 |
| 33 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFD_AAF67829 | 179K| 4388K| | 518 (1)| 00:00:07 |
| 34 | LOAD AS SELECT | | | | | | |
| 35 | WINDOW BUFFER | | 42 | 756 | | 322 (2)| 00:00:04 |
| 36 | HASH GROUP BY | | 42 | 756 | | 322 (2)| 00:00:04 |
| 37 | VIEW | | 110K| 1942K| | 319 (1)| 00:00:04 |
...
2
© 2016 Pythian 40
EXAMPLE 1
THE EXECUTION PLAN
...
| 38 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFE_AAF67829 | 110K| 2697K| | 319 (1)| 00:00:04 |
| 39 | FILTER | | | | | | |
| 40 | SORT GROUP BY ROLLUP | | 1 | 579 | | 28077 (1)| 00:05:37 |
| 41 | MERGE JOIN OUTER | | 10 | 5790 | | 28076 (1)| 00:05:37 |
| 42 | MERGE JOIN OUTER | | 10 | 5790 | | 20379 (1)| 00:04:05 |
| 43 | HASH JOIN OUTER | | 10 | 5660 | | 11818 (1)| 00:02:22 |
| 44 | HASH JOIN OUTER | | 1 | 526 | | 11705 (1)| 00:02:21 |
| 45 | HASH JOIN OUTER | | 1 | 495 | | 11383 (1)| 00:02:17 |
| 46 | HASH JOIN OUTER | | 1 | 464 | | 10860 (1)| 00:02:11 |
| 47 | HASH JOIN OUTER | | 1 | 407 | | 6041 (1)| 00:01:13 |
| 48 | HASH JOIN OUTER | | 1 | 389 | | 6039 (1)| 00:01:13 |
| 49 | HASH JOIN OUTER | | 1 | 371 | | 6037 (1)| 00:01:13 |
| 50 | HASH JOIN OUTER | | 1 | 327 | | 5266 (1)| 00:01:04 |
| 51 | HASH JOIN OUTER | | 1 | 296 | | 1603 (1)| 00:00:20 |
| 52 | VIEW | | 1 | 148 | | 802 (1)| 00:00:10 |
| 53 | HASH GROUP BY | | 1 | 75 | | 802 (1)| 00:00:10 |
| 54 | HASH JOIN OUTER | | 9 | 675 | | 801 (1)| 00:00:10 |
| 55 | TABLE ACCESS BY INDEX ROWID | ACTIVE_USER_VIEWS_BY_TOPIC | 7 | 217 | | 8 (0)| 00:00:01 |
| 56 | INDEX RANGE SCAN | AUVBT_BY_PPID1_IX1 | 7 | | | 5 (0)| 00:00:01 |
| 57 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 |
| 58 | TABLE ACCESS FULL | LEARNING_IMPACT_BY_TOPIC | 179K| 7723K| | 792 (1)| 00:00:10 |
| 59 | VIEW | | 1 | 148 | | 801 (1)| 00:00:10 |
...
3
© 2016 Pythian 41
EXAMPLE 1
THE EXECUTION PLAN
...
| 60 | HASH GROUP BY | | 1 | 75 | | 801 (1)| 00:00:10 |
| 61 | HASH JOIN OUTER | | 8 | 600 | | 800 (1)| 00:00:10 |
| 62 | TABLE ACCESS BY INDEX ROWID | ACTIVE_USER_VIEWS_BY_TOPIC | 7 | 217 | | 8 (0)| 00:00:01 |
| 63 | INDEX RANGE SCAN | AUVBT_BY_PPID1_IX1 | 7 | | | 5 (0)| 00:00:01 |
| 64 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 |
| 65 | TABLE ACCESS FULL | LEARNING_IMPACT_BY_TOPIC | 110K| 4747K| | 792 (1)| 00:00:10 |
| 66 | VIEW | | 1 | 31 | | 3663 (1)| 00:00:44 |
| 67 | HASH JOIN | | 1 | 62 | | 3663 (1)| 00:00:44 |
| 68 | VIEW | | 1 | 31 | | 1658 (1)| 00:00:20 |
| 69 | HASH GROUP BY | | 1 | 96 | | 1658 (1)| 00:00:20 |
| 70 | HASH JOIN | | 1 | 96 | | 1657 (1)| 00:00:20 |
| 71 | NESTED LOOPS | | 1 | 75 | | 863 (1)| 00:00:11 |
| 72 | NESTED LOOPS | | 7 | 75 | | 863 (1)| 00:00:11 |
| 73 | VIEW | | 1 | 40 | | 856 (1)| 00:00:11 |
| 74 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFF_AAF67829 | 1 | 40 | | 856 (1)| 00:00:11 |
| 75 | INDEX RANGE SCAN | AUVBT_BY_PPID1_IX1 | 7 | | | 4 (0)| 00:00:01 |
| 76 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 |
| 77 | TABLE ACCESS BY INDEX ROWID| ACTIVE_USER_VIEWS_BY_TOPIC | 1 | 35 | | 7 (0)| 00:00:01 |
| 78 | TABLE ACCESS FULL | LEARNING_IMPACT_BY_TOPIC | 179K| 3686K| | 794 (1)| 00:00:10 |
| 79 | VIEW | | 1 | 31 | | 2004 (1)| 00:00:25 |
| 80 | HASH GROUP BY | | 1 | 96 | | 2004 (1)| 00:00:25 |
| 81 | HASH JOIN | | 1 | 96 | | 2003 (1)| 00:00:25 |
...
4
© 2016 Pythian 42
EXAMPLE 1
THE EXECUTION PLAN
...
| 82 | NESTED LOOPS | | 1 | 75 | | 1209 (1)| 00:00:15 |
| 83 | NESTED LOOPS | | 987 | 75 | | 1209 (1)| 00:00:15 |
| 84 | VIEW | | 1 | 40 | | 856 (1)| 00:00:11 |
| 85 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFF_AAF67829 | 1 | 40 | | 856 (1)| 00:00:11 |
| 86 | INDEX RANGE SCAN | AUVBT_BY_PPID1_IX1 | 987 | | | 4 (0)| 00:00:01 |
| 87 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 |
| 88 | TABLE ACCESS BY INDEX ROWID| ACTIVE_USER_VIEWS_BY_TOPIC | 1 | 35 | | 353 (0)| 00:00:05 |
| 89 | TABLE ACCESS FULL | LEARNING_IMPACT_BY_TOPIC | 110K| 2265K| | 794 (1)| 00:00:10 |
| 90 | VIEW | | 41 | 1804 | | 771 (1)| 00:00:10 |
| 91 | HASH GROUP BY | | 41 | 1886 | | 771 (1)| 00:00:10 |
| 92 | HASH JOIN | | 157 | 7222 | | 770 (1)| 00:00:10 |
| 93 | TABLE ACCESS BY INDEX ROWID | ACTIVE_USER_VIEWS_BY_TOPIC | 157 | 5338 | | 354 (0)| 00:00:05 |
| 94 | INDEX RANGE SCAN | AUVBT_BY_PPID1_IX1 | 987 | | | 5 (0)| 00:00:01 |
| 95 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 |
| 96 | TABLE ACCESS FULL | ASSESSMENTS | 270K| 3166K| | 415 (1)| 00:00:05 |
| 97 | VIEW | | 42 | 756 | | 2 (0)| 00:00:01 |
| 98 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE01_AAF67829 | 42 | 756 | | 2 (0)| 00:00:01 |
| 99 | VIEW | | 42 | 756 | | 2 (0)| 00:00:01 |
| 100 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE01_AAF67829 | 42 | 756 | | 2 (0)| 00:00:01 |
| 101 | VIEW | | 42 | 2394 | | 4819 (1)| 00:00:58 |
| 102 | HASH JOIN OUTER | | 42 | 6678 | | 4819 (1)| 00:00:58 |
| 103 | HASH JOIN OUTER | | 42 | 5376 | | 4816 (1)| 00:00:58 |
...
5
© 2016 Pythian 43
EXAMPLE 1
THE EXECUTION PLAN
...
| 104 | HASH JOIN OUTER | | 42 | 4074 | | 4813 (1)| 00:00:58 |
| 105 | MERGE JOIN OUTER | | 42 | 2394 | | 4698 (1)| 00:00:57 |
| 106 | VIEW | VW_FOJ_0 | 42 | 1848 | | 4 (0)| 00:00:01 |
| 107 | HASH JOIN FULL OUTER | | 42 | 2604 | | 4 (0)| 00:00:01 |
| 108 | VIEW | | 42 | 1302 | | 2 (0)| 00:00:01 |
| 109 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE01_AAF67829 | 42 | 756 | | 2 (0)| 00:00:01 |
| 110 | VIEW | | 42 | 1302 | | 2 (0)| 00:00:01 |
| 111 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE02_AAF67829 | 42 | 756 | | 2 (0)| 00:00:01 |
| 112 | BUFFER SORT | | 1 | 13 | | 4698 (1)| 00:00:57 |
| 113 | VIEW | | 1 | 13 | | 112 (1)| 00:00:02 |
| 114 | VIEW | | 1 | 13 | | 112 (1)| 00:00:02 |
| 115 | SORT AGGREGATE | | 1 | 13 | | | |
| 116 | VIEW | | 110K| 1402K| | 112 (1)| 00:00:02 |
| 117 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE00_AAF67829 | 110K| 2913K| | 112 (1)| 00:00:02 |
| 118 | VIEW | | 1 | 40 | | 115 (4)| 00:00:02 |
| 119 | WINDOW BUFFER | | 1 | 40 | | 115 (4)| 00:00:02 |
| 120 | HASH GROUP BY | | 1 | 40 | | 115 (4)| 00:00:02 |
| 121 | VIEW | | 110K| 4315K| | 112 (1)| 00:00:02 |
| 122 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE00_AAF67829 | 110K| 2913K| | 112 (1)| 00:00:02 |
| 123 | VIEW | | 30 | 930 | | 3 (34)| 00:00:01 |
| 124 | WINDOW BUFFER | | 30 | 930 | | 3 (34)| 00:00:01 |
| 125 | HASH GROUP BY | | 30 | 930 | | 3 (34)| 00:00:01 |
...
6
© 2016 Pythian 44
EXAMPLE 1
THE EXECUTION PLAN
...
| 126 | VIEW | | 42 | 1302 | | 2 (0)| 00:00:01 |
| 127 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE01_AAF67829 | 42 | 756 | | 2 (0)| 00:00:01 |
| 128 | VIEW | | 30 | 930 | | 3 (34)| 00:00:01 |
| 129 | WINDOW BUFFER | | 30 | 930 | | 3 (34)| 00:00:01 |
| 130 | HASH GROUP BY | | 30 | 930 | | 3 (34)| 00:00:01 |
| 131 | VIEW | | 42 | 1302 | | 2 (0)| 00:00:01 |
| 132 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE02_AAF67829 | 42 | 756 | | 2 (0)| 00:00:01 |
| 133 | VIEW | | 42 | 1302 | | 523 (2)| 00:00:07 |
| 134 | HASH GROUP BY | | 42 | 756 | | 523 (2)| 00:00:07 |
| 135 | VIEW | | 179K| 3159K| | 518 (1)| 00:00:07 |
| 136 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFD_AAF67829 | 179K| 4388K| | 518 (1)| 00:00:07 |
| 137 | VIEW | | 42 | 1302 | | 322 (2)| 00:00:04 |
| 138 | HASH GROUP BY | | 42 | 756 | | 322 (2)| 00:00:04 |
| 139 | VIEW | | 110K| 1942K| | 319 (1)| 00:00:04 |
| 140 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFE_AAF67829 | 110K| 2697K| | 319 (1)| 00:00:04 |
| 141 | VIEW | | 110K| 4315K| | 112 (1)| 00:00:02 |
| 142 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE00_AAF67829 | 110K| 2913K| | 112 (1)| 00:00:02 |
| 143 | BUFFER SORT | | 1 | 13 | | 20379 (1)| 00:04:05 |
| 144 | VIEW | | 1 | 13 | | 856 (1)| 00:00:11 |
| 145 | VIEW | | 1 | 13 | | 856 (1)| 00:00:11 |
| 146 | SORT AGGREGATE | | 1 | | | | |
| 147 | VIEW | | 110K| | | 856 (1)| 00:00:11 |
...
7
© 2016 Pythian 45
...
| 148 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFF_AAF67829 | 110K| 4315K| | 856 (1)| 00:00:11 |
| 149 | BUFFER SORT | | 1 | | | 27221 (1)| 00:05:27 |
| 150 | VIEW | | 1 | | | 770 (1)| 00:00:10 |
| 151 | VIEW | | 1 | | | 770 (1)| 00:00:10 |
| 152 | SORT AGGREGATE | | 1 | 25 | | | |
| 153 | HASH JOIN | | 157 | 3925 | | 770 (1)| 00:00:10 |
| 154 | TABLE ACCESS BY INDEX ROWID | ACTIVE_USER_VIEWS_BY_TOPIC | 157 | 2512 | | 354 (0)| 00:00:05 |
| 155 | INDEX RANGE SCAN | AUVBT_BY_PPID1_IX1 | 987 | | | 5 (0)| 00:00:01 |
| 156 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 |
| 157 | TABLE ACCESS FULL | ASSESSMENTS | 270K| 2374K| | 415 (1)| 00:00:05 |
--------------------------------------------------------------------------------------------------------------------------------------
EXAMPLE 1
THE EXECUTION PLAN
8
© 2016 Pythian 46
EXAMPLE 1
THE EXECUTION PLAN -
#SHTF
© 2016 Pythian 47
EXAMPLE 1
THE OPTIONS
• What can one do in this case?
– Tune the query?
– Check / collect fresh statistics?
– Flush the shared pool? (hoping it's bind variable peeking)
– Run SQL Tuning Advisor?
– or...
• How did the SQL statement execute in the past?
© 2016 Pythian 48
EXAMPLE 1
AWR_SQLID_PERF_TREND_BY_PLAN.SQL
select hss.instance_number inst,
to_char(trunc(sysdate-&days_history+1)+trunc((cast(hs.begin_interval_time as
date)-(trunc(sysdate-&days_history+1)))*24/(&interval_hours))*(&interval_hours)/24,'dd.mm.yyyy hh24:mi:ss') time,
plan_hash_value,
sum(hss.executions_delta) executions,
round(sum(hss.elapsed_time_delta)/1000000,3) elapsed_time_s,
round(sum(hss.cpu_time_delta)/1000000,3) cpu_time_s,
round(sum(hss.iowait_delta)/1000000,3) iowait_s,
round(sum(hss.clwait_delta)/1000000,3) clwait_s,
round(sum(hss.apwait_delta)/1000000,3) apwait_s,
round(sum(hss.ccwait_delta)/1000000,3) ccwait_s,
round(sum(hss.rows_processed_delta),3) rows_processed,
round(sum(hss.buffer_gets_delta),3) buffer_gets,
round(sum(hss.disk_reads_delta),3) disk_reads,
round(sum(hss.direct_writes_delta),3) direct_writes
from dba_hist_sqlstat hss, dba_hist_snapshot hs
where hss.sql_id='&sql_id'
and hss.snap_id=hs.snap_id
and hs.begin_interval_time>=trunc(sysdate)-&days_history+1
group by hss.instance_number, trunc(sysdate-&days_history+1)+trunc((cast(hs.begin_interval_time as
date)-(trunc(sysdate-&days_history+1)))*24/(&interval_hours))*(&interval_hours)/24, plan_hash_value
having sum(hss.executions_delta)>0
© 2016 Pythian 49
10:21:28 SQL> @awr_sqlid_perf_trend_by_plan.sql 4db73upm43ck1 5 24
TIME PLAN_HASH_VALUE EXECUTIONS ELAPSED_TIME_S CPU_TIME_S IOWAIT_S BUFFER_GETS DISK_READS
------------------- --------------- ----------- -------------- ------------ ------------ ----------------- -----------------
02.06.2016 00:00:00 1597670781 291 278.018 254.272 22.717 19787274.000 50740.000
03.06.2016 00:00:00 1597670781 205 204.755 189.479 14.583 14986545.000 71451.000
04.06.2016 00:00:00 1597670781 3 8.275 4.483 3.936 314594.000 15790.000
04.06.2016 00:00:00 4142332636 2 6.149 3.933 2.307 119766.000 47343.000
05.06.2016 00:00:00 82218884 47 11805.808 5766.836 22.799 1247372099.000 173254.000
06.06.2016 00:00:00 82218884 127 7216.393 3751.640 9.431 522088617.000 24677.000
A few columns have been removed from the outputs to improve the readability!
EXAMPLE 1
SQL PERFORMANCE
LOOKING AT 5 DAYS OF PERFORMANCE DATA AT ONCE!
© 2016 Pythian 50
10:21:28 SQL> @awr_sqlid_perf_trend_by_plan.sql 4db73upm43ck1 5 24
TIME PLAN_HASH_VALUE EXECUTIONS ELAPSED_TIME_S CPU_TIME_S IOWAIT_S BUFFER_GETS DISK_READS
------------------- --------------- ----------- -------------- ------------ ------------ ----------------- -----------------
02.06.2016 00:00:00 1597670781 291 278.018 254.272 22.717 19787274.000 50740.000
03.06.2016 00:00:00 1597670781 205 204.755 189.479 14.583 14986545.000 71451.000
04.06.2016 00:00:00 1597670781 3 8.275 4.483 3.936 314594.000 15790.000
04.06.2016 00:00:00 4142332636 2 6.149 3.933 2.307 119766.000 47343.000
05.06.2016 00:00:00 82218884 47 11805.808 5766.836 22.799 1247372099.000 173254.000
06.06.2016 00:00:00 82218884 127 7216.393 3751.640 9.431 522088617.000 24677.000
A few columns have been removed from the outputs to improve the readability!
EXAMPLE 1
SQL PERFORMANCE
LOOKING AT 5 DAYS OF PERFORMANCE DATA AT ONCE!
© 2016 Pythian 51
EXAMPLE 1
SQL PLAN BASELINE FROM AWR
exec DBMS_SQLTUNE.CREATE_SQLSET(sqlset_name => 'CR1064802', description => 'Plan for sql_id 4db73upm43ck1');
DECLARE
cur sys_refcursor;
BEGIN
OPEN cur FOR SELECT VALUE(P) FROM table(dbms_sqltune.select_workload_repository(11434,12880,'sql_id=''4db73upm43ck1'' and
plan_hash_value=1597670781' , NULL, NULL, NULL, NULL, NULL, NULL, 'ALL')) P;
DBMS_SQLTUNE.LOAD_SQLSET(load_option=>'MERGE',sqlset_name => 'CR1064802', populate_cursor => cur);
CLOSE cur;
END;
VARIABLE cnt NUMBER
EXECUTE :cnt := DBMS_SPM.LOAD_PLANS_FROM_SQLSET(
sqlset_name => 'CR1064802',
basic_filter => 'sql_id=''4db73upm43ck1''');
comment on table cl_report_owner.ACTIVE_USER_VIEWS_BY_TOPIC is '';
© 2016 Pythian 52
11:03:11 SQL> @awr_sqlid_perf_trend_by_plan.sql 4db73upm43ck1 2 1
TIME PLAN_HASH_VALUE EXECUTIONS ELAPSED_TIME_S CPU_TIME_S IOWAIT_S BUFFER_GETS DISK_READS
------------------- --------------- ----------- -------------- ------------ ------------ ----------------- -----------------
...
06.06.2016 00:00:00 82218884 3 4.600 4.019 .608 1425936.000 965.000
06.06.2016 01:00:00 82218884 4 14.374 11.740 2.756 4726784.000 12836.000
06.06.2016 02:00:00 82218884 20 34.437 33.125 .619 7475353.000 264.000
06.06.2016 03:00:00 82218884 3 4.527 4.485 .032 1205412.000 14.000
06.06.2016 04:00:00 82218884 18 13.543 13.366 .132 1346631.000 57.000
06.06.2016 05:00:00 82218884 22 43.248 40.954 2.217 14290668.000 4439.000
06.06.2016 06:00:00 82218884 11 78.463 77.897 .311 45601072.000 79.000
06.06.2016 07:00:00 82218884 2 3.338 2.155 1.237 165446.000 3369.000
06.06.2016 08:00:00 82218884 10 9.241 9.098 .098 900049.000 61.000
06.06.2016 09:00:00 82218884 34 7010.622 3554.801 1.422 444951266.000 2593.000
06.06.2016 10:00:00 82218884 15 10942.980 4653.979 4.637 586951399.000 2078.000
06.06.2016 10:00:00 1597670781 1 7.910 2.047 .323 117577.000 28.000
06.06.2016 11:00:00 1597670781 1 1.028 1.008 .020 117468.000 28.000
A few columns have been removed from the outputs to improve the readability!
EXAMPLE 1
SQL PERFORMANCE
Yea, but ...
... what if the good plan is not
captured in the AWR?
© 2016 Pythian 53
-- Create the procedure that will be used to collect the execution plans
create or replace procedure PERF.XXSTABILITY_CAPTURE_PLANS is
cur sys_refcursor;
cursor clist is with raw_sqlids as (select sql_id from v$sqlarea
where sql_id in (select sql_id from v$active_session_history
where sample_time>=sysdate-1/24 and sql_plan_hash_value>0
and machine like '%-hesvc-app0%')
and plan_hash_value>0 and executions>2
union
select sql_id from v$sqlarea
where sql_id in (select sql_id from v$open_cursor where
sid in (select sid from v$session where machine like '%-hesvc-app0%'))
and plan_hash_value>0 and executions>2 and parsing_schema_name not in
('ANONYMOUS','APEX_030200','APEX_040000','APEX_SSO','APPQOSSYS',
'CTXSYS','DBSNMP','DIP','EXFSYS','FLOWS_FILES','MDSYS','OLAPSYS','ORACLE_OCM','ORDDATA','ORDPLUGINS','ORDSYS','OUTLN','OWBSYS
','SI_INFORMTN_SCHEMA','SQLTXADMIN','SQLTXPLAIN','SYS','SYSMAN','SYSTEM','TRCANLZR','WMSYS','XDB','XS$NULL')),
sqlids as (select distinct ''''||sql_id||'''' sql_id, trunc((rownum-1)/200) rn from raw_sqlids)
select listagg(s.sql_id,',') within group (order by s.sql_id) as sql_id_filter from sqlids s group by s.rn;
c clist%rowtype;
BEGIN
for c in clist loop
OPEN cur FOR SELECT VALUE(P) FROM table(dbms_sqltune.select_cursor_cache(basic_filter=>'sql_id
in('||c.sql_id_filter||')', attribute_list=>'ALL')) P;
DBMS_SQLTUNE.LOAD_SQLSET(load_option=>'MERGE',sqlset_name => 'XXSTABILITY_EXECUTION_PLANS', populate_cursor => cur);
CLOSE cur;
end loop;
Commit;
END;
/
EXAMPLE 1
PRESERVING GOOD EXECUTION PLANS
© 2016 Pythian 54
-- Create the Scheduler Job which will run on every hour's 47th minute
Begin
Dbms_scheduler.create_job
(job_name => 'COLLECT_XXSTABILITY_PLANS',
job_type => 'STORED_PROCEDURE',
job_action => 'PERF.XXSTABILITY_CAPTURE_PLANS',
start_date => SYSDATE,
repeat_interval => 'FREQ=HOURLY; INTERVAL=1; BYMINUTE=47;',
enabled => TRUE);
End;
/
-- Loading the baseline from SELECT_SQLSET for a specific sql_id and plan
VARIABLE cnt NUMBER
EXECUTE :cnt := DBMS_SPM.LOAD_PLANS_FROM_SQLSET( -
sqlset_name => 'XXSTABILITY_EXECUTION_PLANS', -
basic_filter => 'sql_id=''dtzsc12fbbjk2'' and plan_hash_value=2896891279');
EXAMPLE 1
PRESERVING EXECUTION PLANS
© 2016 Pythian 55
EXAMPLE 2
IO performance
© 2016 Pythian 56
• Oracle e-Business Suite
– R12.2
– 12.1.0.2
• Alert from the client
– Starting from September 5th, everything has become a lot more
slower. Entering a sales order can take up to 15 minutes instead
of usual 15 seconds.
• Not enough detail to look at any specific process or query
EXAMPLE 2
THE PROBLEM
© 2016 Pythian 57
select to_char(time,'DD.MM.YYYY HH24:MI:SS') time, stat_name, sum(delta_value) value_delta from
(select hss.snap_id,
trunc(sysdate-&days_history+1)+trunc((cast(hs.end_interval_time as
date)-(trunc(sysdate-&days_history+1)))*24/(&interval_hours))*(&interval_hours)/24 time,
stat_name,
value,
value-(lag(value,1) over(partition by hs.startup_time, stat_name order by hss.snap_id)) delta_value
from dba_hist_sys_time_model hss, dba_hist_snapshot hs
where hss.snap_id=hs.snap_id
and hss.instance_number=hs.instance_number
and hs.end_interval_time>=trunc(sysdate)-&days_history+1
and hss.stat_name like '&stat_name')
group by time, stat_name
order by to_date(time,'DD.MM.YYYY HH24:MI:SS'), 1;
EXAMPLE 2
AWR_SYS_TIME_MODEL_TREND.SQL
© 2016 Pythian 58
EXAMPLE 2
CPU OR WAITING?
SQL> @awr_sys_time_model_trend.sql "DB CPU" 14 24
TIME STAT_NAME VALUE_DELTA
------------------- ---------------------------------------------------------------- -----------------
28.08.2016 00:00:00 DB CPU 204502770965
29.08.2016 00:00:00 DB CPU 240124304792
30.08.2016 00:00:00 DB CPU 243171465732
31.08.2016 00:00:00 DB CPU 271839933025
01.09.2016 00:00:00 DB CPU 398156022996
02.09.2016 00:00:00 DB CPU 343376689897
03.09.2016 00:00:00 DB CPU 262729582269
04.09.2016 00:00:00 DB CPU 79584869551
05.09.2016 00:00:00 DB CPU 87671787128
06.09.2016 00:00:00 DB CPU 103383834430
07.09.2016 00:00:00 DB CPU 16642806685
08.09.2016 00:00:00 DB CPU 215983418676
09.09.2016 00:00:00 DB CPU 100324311282
10.09.2016 00:00:00 DB CPU 11631538710
We're spending less time on CPU, so it's likely we're spending more time somewhere else!
© 2016 Pythian 59
EXAMPLE 2
SO WHAT ARE WE WAITING ON? (WAIT CLASSES)
select * from (
select to_char(time,'DD.MM.YYYY HH24:MI:SS') time, wait_class, sum(delta_time_waited)/1000000 wait_time_s from
(select hse.snap_id,
trunc(sysdate-&days_history+1)+trunc((cast(hs.end_interval_time as
date)-(trunc(sysdate-&days_history+1)))*24/(&interval_hours))*(&interval_hours)/24 time,
EVENT_NAME,
WAIT_CLASS,
TIME_WAITED_MICRO-(lag(TIME_WAITED_MICRO,1) over(partition by hs.STARTUP_TIME, EVENT_NAME order by hse.snap_id))
delta_time_waited
from DBA_HIST_SYSTEM_EVENT hse, DBA_HIST_SNAPSHOT hs
where hse.snap_id=hs.snap_id
and hs.end_interval_time>=trunc(sysdate)-&days_history+1)
group by time, event_name, wait_class)
pivot
(
sum(wait_time_s) for wait_class in ('Administrative','Application','Cluster'
,'Commit','Concurrency','Configuration'
,'Network','Other','Queueing'
,'Scheduler','System I/O','User I/O','Idle')
)
order by to_date(time,'DD.MM.YYYY HH24:MI:SS');
© 2016 Pythian 60
SQL> @awr_wait_class_hist.sql 14 1
TIME 'Administrative' 'Application' 'Commit' 'Concurrency' 'Other' 'Scheduler' 'System I/O' 'User I/O' 'Idle'
------------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- -----------------
28.08.2016 01:00:00 0 29 27 25 35 0 411 9494 1167334
28.08.2016 02:00:00 0 28 12 16 84 0 435 5944 1220988
28.08.2016 03:00:00 0 28 15 1 17 0 72 5955 1102848
28.08.2016 04:00:00 0 27 13 16 17 0 68 4715 1160580
28.08.2016 05:00:00 0 28 23 0 81 0 361 3585 1100722
28.08.2016 06:00:00 0 28 18 0 58 0 264 3281 1162927
28.08.2016 07:00:00 0 29 13 0 19 0 61 1908 1219200
28.08.2016 08:00:00 0 29 14 0 23 0 67 3752 1121374
28.08.2016 09:00:00 0 29 16 0 22 0 68 2042 1102494
28.08.2016 10:00:00 0 28 14 0 20 0 67 2191 1317052
...
03.09.2016 19:00:00 0 11 16 1 79 0 238 2943 1191940
03.09.2016 20:00:00 0 15 18 2 96 0 205 3640 1284953
03.09.2016 21:00:00 0 13 25 1 102 0 439 3985 1155491
03.09.2016 22:00:00 0 47 7068 965 1147 0 10445 11709 1201118
03.09.2016 23:00:00 0 43 19698 512 2354 0 56763 16627 1119525
04.09.2016 01:00:00 4 500 50406 6114 14543 0 131447 79139 2224995
04.09.2016 04:00:00 55 1067 65711 4350 16350 0 165858 199986 3820512
04.09.2016 05:00:00 0 29 12118 766 2378 0 13428 55055 1160076
04.09.2016 06:00:00 1 32 2510 54 1242 0 7708 47570 1295052
04.09.2016 07:00:00 0 21 546 1 305 0 3139 42468 1299331
04.09.2016 08:00:00 0 18 265 16 200 0 1788 28516 1242703
04.09.2016 09:00:00 0 13 377 1 174 0 1777 13472 1194265
04.09.2016 10:00:00 0 15 447 1 215 0 2371 15196 1242622
04.09.2016 11:00:00 0 13 404 2 205 0 2312 14984 1207877
04.09.2016 12:00:00 0 13 405 1 238 0 2664 16214 1217226
04.09.2016 13:00:00 0 15 597 1 354 0 3093 14902 1232148
04.09.2016 14:00:00 0 17 486 1 224 0 2252 12952 1313141
04.09.2016 15:00:00 0 5 486 1 254 0 2404 13285 1176055
EXAMPLE 2
SO WHAT ARE WE WAITING ON? (WAIT CLASSES)
© 2016 Pythian 61
SQL> @awr_wait_class_hist.sql 14 1
TIME 'Administrative' 'Application' 'Commit' 'Concurrency' 'Other' 'Scheduler' 'System I/O' 'User I/O' 'Idle'
------------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- -----------------
28.08.2016 01:00:00 0 29 27 25 35 0 411 9494 1167334
28.08.2016 02:00:00 0 28 12 16 84 0 435 5944 1220988
28.08.2016 03:00:00 0 28 15 1 17 0 72 5955 1102848
28.08.2016 04:00:00 0 27 13 16 17 0 68 4715 1160580
28.08.2016 05:00:00 0 28 23 0 81 0 361 3585 1100722
28.08.2016 06:00:00 0 28 18 0 58 0 264 3281 1162927
28.08.2016 07:00:00 0 29 13 0 19 0 61 1908 1219200
28.08.2016 08:00:00 0 29 14 0 23 0 67 3752 1121374
28.08.2016 09:00:00 0 29 16 0 22 0 68 2042 1102494
28.08.2016 10:00:00 0 28 14 0 20 0 67 2191 1317052
...
03.09.2016 19:00:00 0 11 16 1 79 0 238 2943 1191940
03.09.2016 20:00:00 0 15 18 2 96 0 205 3640 1284953
03.09.2016 21:00:00 0 13 25 1 102 0 439 3985 1155491
03.09.2016 22:00:00 0 47 7068 965 1147 0 10445 11709 1201118
03.09.2016 23:00:00 0 43 19698 512 2354 0 56763 16627 1119525
04.09.2016 01:00:00 4 500 50406 6114 14543 0 131447 79139 2224995
04.09.2016 04:00:00 55 1067 65711 4350 16350 0 165858 199986 3820512
04.09.2016 05:00:00 0 29 12118 766 2378 0 13428 55055 1160076
04.09.2016 06:00:00 1 32 2510 54 1242 0 7708 47570 1295052
04.09.2016 07:00:00 0 21 546 1 305 0 3139 42468 1299331
04.09.2016 08:00:00 0 18 265 16 200 0 1788 28516 1242703
04.09.2016 09:00:00 0 13 377 1 174 0 1777 13472 1194265
04.09.2016 10:00:00 0 15 447 1 215 0 2371 15196 1242622
04.09.2016 11:00:00 0 13 404 2 205 0 2312 14984 1207877
04.09.2016 12:00:00 0 13 405 1 238 0 2664 16214 1217226
04.09.2016 13:00:00 0 15 597 1 354 0 3093 14902 1232148
04.09.2016 14:00:00 0 17 486 1 224 0 2252 12952 1313141
04.09.2016 15:00:00 0 5 486 1 254 0 2404 13285 1176055
EXAMPLE 2
SO WHAT ARE WE WAITING ON? (WAIT CLASSES)
© 2016 Pythian 62
EXAMPLE 2
SO WHAT ARE WE WAITING ON? (WAIT CLASSES)
© 2016 Pythian 63
• What could it be?
– We're doing way more IOs
– The IOs are much slower
– … or both
EXAMPLE 2
“USER I/O” IS MISBEHAVING
© 2016 Pythian 64
EXAMPLE 2
AWR_WAIT_CLASS_EVENTS_TREND.SQL - WHAT HAPPENED TO THE USER I/O?
select to_char(time,'DD.MM.YYYY HH24:MI:SS') time, event_name, sum(delta_total_waits) total_waits,
round(sum(delta_time_waited/1000000),3) total_time_s,
round(sum(delta_time_waited)/decode(sum(delta_total_waits),0,null,sum(delta_total_waits))/1000,3) avg_time_ms from
(select hse.snap_id,
trunc(sysdate-&days_history+1)+trunc((cast(hs.begin_interval_time as
date)-(trunc(sysdate-&days_history+1)))*24/(&interval_hours))*(&interval_hours)/24 time,
EVENT_NAME,
WAIT_CLASS,
TOTAL_WAITS-(lag(TOTAL_WAITS,1) over(partition by hs.STARTUP_TIME, EVENT_NAME order by hse.snap_id)) delta_total_waits,
TIME_WAITED_MICRO-(lag(TIME_WAITED_MICRO,1) over(partition by hs.STARTUP_TIME, EVENT_NAME order by hse.snap_id))
delta_time_waited
from DBA_HIST_SYSTEM_EVENT hse, DBA_HIST_SNAPSHOT hs
where hse.snap_id=hs.snap_id
and hs.begin_interval_time>=trunc(sysdate)-&days_history+1
and hse.WAIT_CLASS like '&wait_class')
group by time, event_name
order by 2, to_date(time,'DD.MM.YYYY HH24:MI:SS');
© 2016 Pythian 65
SQL> @awr_wait_class_events_trend.sql "User I/O" 14 24
TIME EVENT_NAME TOTAL_WAITS TOTAL_TIME_S AVG_TIME_MS
------------------- ---------------------------------------------------------------- --------------- -------------- --------------
...
28.08.2016 00:00:00 db file scattered read 110851 2332.624 21.043
29.08.2016 00:00:00 db file scattered read 553580 7823.429 14.132
30.08.2016 00:00:00 db file scattered read 710412 8074.224 11.366
31.08.2016 00:00:00 db file scattered read 686109 8779.227 12.796
01.09.2016 00:00:00 db file scattered read 3697362 79473.993 21.495
02.09.2016 00:00:00 db file scattered read 905800 12899.301 14.241
03.09.2016 00:00:00 db file scattered read 181632 5821.909 32.053
04.09.2016 00:00:00 db file scattered read 142537 44193.256 310.048
05.09.2016 00:00:00 db file scattered read 326866 32658.860 99.915
06.09.2016 00:00:00 db file scattered read 258082 29108.440 112.788
07.09.2016 00:00:00 db file scattered read 534720 44248.693 82.751
08.09.2016 00:00:00 db file scattered read 158424 22083.148 139.393
09.09.2016 00:00:00 db file scattered read 313153 47113.132 150.448
10.09.2016 00:00:00 db file scattered read 145106 14431.633 99.456
...
EXAMPLE 2
AWR_WAIT_CLASS_EVENTS_TREND.SQL - WHAT HAPPENED TO THE USER I/O?
© 2016 Pythian 66
SQL> @awr_wait_class_events_trend.sql "User I/O" 14 24
TIME EVENT_NAME TOTAL_WAITS TOTAL_TIME_S AVG_TIME_MS
------------------- ---------------------------------------------------------------- --------------- -------------- --------------
...
28.08.2016 00:00:00 db file sequential read 15851686 24652.524 1.555
29.08.2016 00:00:00 db file sequential read 12892354 41750.047 3.238
30.08.2016 00:00:00 db file sequential read 37228593 89856.611 2.414
31.08.2016 00:00:00 db file sequential read 23431904 71298.237 3.043
01.09.2016 00:00:00 db file sequential read 26866886 82063.899 3.054
02.09.2016 00:00:00 db file sequential read 20273240 60593.329 2.989
03.09.2016 00:00:00 db file sequential read 5114798 28039.911 5.482
04.09.2016 00:00:00 db file sequential read 7142647 401434.020 56.202
05.09.2016 00:00:00 db file sequential read 8949913 292546.728 32.687
06.09.2016 00:00:00 db file sequential read 19490699 665357.848 34.137
07.09.2016 00:00:00 db file sequential read 16387403 541792.005 33.061
08.09.2016 00:00:00 db file sequential read 6989352 241881.608 34.607
09.09.2016 00:00:00 db file sequential read 12549290 453219.850 36.115
10.09.2016 00:00:00 db file sequential read 4823556 119185.469 24.709
...
EXAMPLE 2
AWR_WAIT_CLASS_EVENTS_TREND.SQL - WHAT HAPPENED TO THE USER I/O?
© 2016 Pythian 67
EXAMPLE 2
AWR_WAIT_CLASS_EVENTS_TREND.SQL - WHAT HAPPENED TO THE USER I/O?
© 2016 Pythian 68
EXAMPLE 2
AWR_WAIT_CLASS_EVENTS_TREND.SQL - WHAT HAPPENED TO THE USER I/O?
© 2016 Pythian 69
The Issue was passed on to the storage team.
They found 2 faulty drives.
EXAMPLE 2
THE ROOT CAUSE
© 2016 Pythian 70
EXAMPLE 3
Redo size
© 2016 Pythian 71
• Oracle e-Business Suite
– R12.1
– 12.1.0.2
• Alert from the monitoring
– We're running out of space on the mount point that's used as a
long term storage for archived logs (10 days)
EXAMPLE 3
THE PROBLEM
© 2016 Pythian 72
select to_char(time,'DD.MM.YYYY HH24:MI:SS') time, stat_name, sum(delta_value) value_delta from
(select hss.snap_id,
trunc(sysdate-&days_history+1)+trunc((cast(hs.end_interval_time as
date)-(trunc(sysdate-&days_history+1)))*24/(&interval_hours))*(&interval_hours)/24 time,
stat_name,
value,
value-(lag(value,1) over(partition by hs.startup_time, stat_name order by hss.snap_id)) delta_value
from dba_hist_sysstat hss, dba_hist_snapshot hs
where hss.snap_id=hs.snap_id
and hss.instance_number=hs.instance_number
and hs.begin_interval_time>=trunc(sysdate)-&days_history+1
and hss.stat_name like ' ')
group by time, stat_name
order by 2, to_date(time,'DD.MM.YYYY HH24:MI:SS');
EXAMPLE 3
AWR_STAT_TREND.SQL
© 2016 Pythian 73
SQL> @awr_stat_trend "redo size" 30 4
TIME STAT_NAME VALUE_DELTA
------------------- ---------------- -----------------
...
22.10.2016 20:00:00 redo size 29672405900
23.10.2016 00:00:00 redo size 45868325988
23.10.2016 04:00:00 redo size 28625802412
23.10.2016 08:00:00 redo size 46741701432
23.10.2016 12:00:00 redo size 48761724412
23.10.2016 16:00:00 redo size 46302390088
23.10.2016 20:00:00 redo size 29891530168
24.10.2016 00:00:00 redo size 39012726684
24.10.2016 04:00:00 redo size 33850511384
24.10.2016 08:00:00 redo size 27530642800
24.10.2016 12:00:00 redo size 103480430448
24.10.2016 16:00:00 redo size 124196709984
24.10.2016 20:00:00 redo size 30110908608
25.10.2016 00:00:00 redo size 38282203780
25.10.2016 04:00:00 redo size 34092919668
EXAMPLE 3
WHEN DO DID WE GENERATE MORE REDO?
© 2016 Pythian 74
EXAMPLE 3
WHEN DO DID WE GENERATE MORE REDO?
© 2016 Pythian 75
EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385764.arc');
EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385765.arc');
EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385766.arc');
EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385767.arc');
EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385768.arc');
EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385769.arc');
EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385770.arc');
EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385771.arc');
EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385772.arc');
EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385773.arc');
EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385774.arc');
EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385775.arc');
EXEC DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
EXAMPLE 3
WHAT CAUSED THE EXCESSIVE REDO?
© 2016 Pythian 76
set pages 50000 lines 500 tab off time on serverout on
col owner for a30
col object_name for a30
col subobject_name for a30
col object_type for a30
select data_obj#, owner, object_name, subobject_name, count(*) REDO_CNT, sum(R_SIZE_B)/1024/1024 REDO_MB from (
select data_obj#,
THREAD#,
SEQUENCE#,
RBABLK,
RBABYTE,
RBABLK*512+RBABYTE b_offset,
(lead(RBABLK*512+RBABYTE) over (partition by RBASQN order by RBABLK*512+RBABYTE))-(RBABLK*512+RBABYTE) R_SIZE_B
from V$LOGMNR_CONTENTS) lc, dba_objects o
where o.data_object_id(+)=lc.data_obj#
group by data_obj#, owner, object_name, subobject_name order by 6;
EXAMPLE 3
WHAT CAUSED THE EXCESSIVE REDO?
© 2016 Pythian 77
DATA_OBJ# OWNER OBJECT_NAME SUBOBJECT_NAME REDO_CNT REDO_MB
---------- ----------- ------------------------------ ----------------- ---------- ----------
...
4214022 AR SYS_LOB0004214021C00002$$ 16997 55.844368
4214007 AR SYS_LOB0004214006C00002$$ 11991 60.0471535
160758 APPLSYS MO_GLOB_ORG_ACCESS_TMP_U1 431892 80.7151947
112443 784710 142.132919
0 CTXSYS DR$DBO 859097 253.653015
137676 3774665 565.485004
181691 APPS XX_OM_PRICING_DETAILS_GTT_N100 3840811 709.441868
1026278 APPS XX_OM_PRICING_DETAILS_GTT_NS 3870531 772.384396
181690 APPS XX_OM_PRICING_DETAILS_GTT_N400 3886342 817.994175
181692 APPS XX_OM_PRICING_DETAILS_GTT_N200 3943281 882.903255
880271 APPS XX_OM_PRICING_DETAIL_GTT_N20 4118952 1245.52386
181689 APPS XX_OM_PRICING_DETAILS_GTT_N300 4238632 1464.44829
307 rows selected.
EXEC DBMS_LOGMNR.END_LOGMNR;
EXAMPLE 3
WHAT CAUSED THE EXCESSIVE REDO?
© 2016 Pythian 78
One of the concurrent programs inserting into the GTT
was executed more often during the time of the issue
A) Added +append and set alter session set temp_undo_enabled=true
B) The frequency of the concurrent program was reduced
C) 4 of 6 indexes on the GTT were dropped
EXAMPLE 3
THE ROOT CAUSE
Thanks,
@davidmkurtz
© 2016 Pythian 79
Redo Size (M)
EXAMPLE 3
THE ROOT CAUSE
Conventional load Direct path load (+append)
Temporary Undo = False 674 200
Temporary Undo = True 13 8
© 2016 Pythian 80
SUMMARY
© 2016 Pythian 81
• AWR reports are not good in displaying how
performance changes over time.
• Many performance metrics stored in AWR can be:
– Put on a timeline to see how they change over time
– Useful for Troubleshooting
– Useful for Prediction
• Remember, you're still working with aggregated data
SUMMARY
© 2016 Pythian 82
SUMMARY
Photo by Kate Ter Haar / CC BY 2.0
© 2016 Pythian 83
AWR is a complex beast, but it’s not necessary to know much to start mining
Be Brave!
But buy Diagnostics pack licenses first.
© 2016 Pythian 84
THANK YOU
@MarisDBA
Elsins@pythian.com

More Related Content

What's hot

Best Practices for running the Oracle Database on EC2 webinar
Best Practices for running the Oracle Database on EC2 webinarBest Practices for running the Oracle Database on EC2 webinar
Best Practices for running the Oracle Database on EC2 webinarTom Laszewski
 
Advanced data migration techniques for Amazon RDS
Advanced data migration techniques for Amazon RDSAdvanced data migration techniques for Amazon RDS
Advanced data migration techniques for Amazon RDSTom Laszewski
 
AWS Database Services-Philadelphia AWS User Group-4-17-2018
AWS Database Services-Philadelphia AWS User Group-4-17-2018AWS Database Services-Philadelphia AWS User Group-4-17-2018
AWS Database Services-Philadelphia AWS User Group-4-17-2018Bert Zahniser
 
Migrating Your Oracle Database to PostgreSQL - AWS Online Tech Talks
Migrating Your Oracle Database to PostgreSQL - AWS Online Tech TalksMigrating Your Oracle Database to PostgreSQL - AWS Online Tech Talks
Migrating Your Oracle Database to PostgreSQL - AWS Online Tech TalksAmazon Web Services
 
AWS re:Invent 2016: Case Study: Librato's Experience Running Cassandra Using ...
AWS re:Invent 2016: Case Study: Librato's Experience Running Cassandra Using ...AWS re:Invent 2016: Case Study: Librato's Experience Running Cassandra Using ...
AWS re:Invent 2016: Case Study: Librato's Experience Running Cassandra Using ...Amazon Web Services
 
October 2016 HUG: Architecture of an Open Source RDBMS powered by HBase and ...
October 2016 HUG: Architecture of an Open Source RDBMS powered by HBase and ...October 2016 HUG: Architecture of an Open Source RDBMS powered by HBase and ...
October 2016 HUG: Architecture of an Open Source RDBMS powered by HBase and ...Yahoo Developer Network
 
SQLIO - measuring storage performance
SQLIO - measuring storage performanceSQLIO - measuring storage performance
SQLIO - measuring storage performancevalerian_ceaus
 
Scaling Pinterest
Scaling PinterestScaling Pinterest
Scaling PinterestC4Media
 
Building Effective Near-Real-Time Analytics with Spark Streaming and Kudu
Building Effective Near-Real-Time Analytics with Spark Streaming and KuduBuilding Effective Near-Real-Time Analytics with Spark Streaming and Kudu
Building Effective Near-Real-Time Analytics with Spark Streaming and KuduJeremy Beard
 
Open Source Databases on the Cloud - Peter Dachnowicz
Open Source Databases on the Cloud - Peter DachnowiczOpen Source Databases on the Cloud - Peter Dachnowicz
Open Source Databases on the Cloud - Peter DachnowiczAmazon Web Services
 
Migrate Oracle database to Amazon RDS
Migrate Oracle database to Amazon RDSMigrate Oracle database to Amazon RDS
Migrate Oracle database to Amazon RDSJesus Guzman
 
Optimizing Apache HBase for Cloud Storage in Microsoft Azure HDInsight
Optimizing Apache HBase for Cloud Storage in Microsoft Azure HDInsightOptimizing Apache HBase for Cloud Storage in Microsoft Azure HDInsight
Optimizing Apache HBase for Cloud Storage in Microsoft Azure HDInsightHBaseCon
 
Using Kafka and Kudu for fast, low-latency SQL analytics on streaming data
Using Kafka and Kudu for fast, low-latency SQL analytics on streaming dataUsing Kafka and Kudu for fast, low-latency SQL analytics on streaming data
Using Kafka and Kudu for fast, low-latency SQL analytics on streaming dataMike Percy
 
AWS June 2016 Webinar Series - Amazon Aurora Deep Dive - Optimizing Database ...
AWS June 2016 Webinar Series - Amazon Aurora Deep Dive - Optimizing Database ...AWS June 2016 Webinar Series - Amazon Aurora Deep Dive - Optimizing Database ...
AWS June 2016 Webinar Series - Amazon Aurora Deep Dive - Optimizing Database ...Amazon Web Services
 
Azure + DataStax Enterprise (DSE) Powers Office365 Per User Store
Azure + DataStax Enterprise (DSE) Powers Office365 Per User StoreAzure + DataStax Enterprise (DSE) Powers Office365 Per User Store
Azure + DataStax Enterprise (DSE) Powers Office365 Per User StoreDataStax Academy
 
SQL Server to Redshift Data Load Using SSIS
SQL Server to Redshift Data Load Using SSISSQL Server to Redshift Data Load Using SSIS
SQL Server to Redshift Data Load Using SSISMarc Leinbach
 

What's hot (20)

Best Practices for running the Oracle Database on EC2 webinar
Best Practices for running the Oracle Database on EC2 webinarBest Practices for running the Oracle Database on EC2 webinar
Best Practices for running the Oracle Database on EC2 webinar
 
Migrating Oracle to PostgreSQL
Migrating Oracle to PostgreSQLMigrating Oracle to PostgreSQL
Migrating Oracle to PostgreSQL
 
Advanced data migration techniques for Amazon RDS
Advanced data migration techniques for Amazon RDSAdvanced data migration techniques for Amazon RDS
Advanced data migration techniques for Amazon RDS
 
AWS Database Services-Philadelphia AWS User Group-4-17-2018
AWS Database Services-Philadelphia AWS User Group-4-17-2018AWS Database Services-Philadelphia AWS User Group-4-17-2018
AWS Database Services-Philadelphia AWS User Group-4-17-2018
 
Migrating Your Oracle Database to PostgreSQL - AWS Online Tech Talks
Migrating Your Oracle Database to PostgreSQL - AWS Online Tech TalksMigrating Your Oracle Database to PostgreSQL - AWS Online Tech Talks
Migrating Your Oracle Database to PostgreSQL - AWS Online Tech Talks
 
AWS re:Invent 2016: Case Study: Librato's Experience Running Cassandra Using ...
AWS re:Invent 2016: Case Study: Librato's Experience Running Cassandra Using ...AWS re:Invent 2016: Case Study: Librato's Experience Running Cassandra Using ...
AWS re:Invent 2016: Case Study: Librato's Experience Running Cassandra Using ...
 
Amazon RDS Deep Dive
Amazon RDS Deep DiveAmazon RDS Deep Dive
Amazon RDS Deep Dive
 
October 2016 HUG: Architecture of an Open Source RDBMS powered by HBase and ...
October 2016 HUG: Architecture of an Open Source RDBMS powered by HBase and ...October 2016 HUG: Architecture of an Open Source RDBMS powered by HBase and ...
October 2016 HUG: Architecture of an Open Source RDBMS powered by HBase and ...
 
SQLIO - measuring storage performance
SQLIO - measuring storage performanceSQLIO - measuring storage performance
SQLIO - measuring storage performance
 
Scaling Pinterest
Scaling PinterestScaling Pinterest
Scaling Pinterest
 
Building Effective Near-Real-Time Analytics with Spark Streaming and Kudu
Building Effective Near-Real-Time Analytics with Spark Streaming and KuduBuilding Effective Near-Real-Time Analytics with Spark Streaming and Kudu
Building Effective Near-Real-Time Analytics with Spark Streaming and Kudu
 
Open Source Databases on the Cloud - Peter Dachnowicz
Open Source Databases on the Cloud - Peter DachnowiczOpen Source Databases on the Cloud - Peter Dachnowicz
Open Source Databases on the Cloud - Peter Dachnowicz
 
Achieving 100k Queries per Hour on Hive on Tez
Achieving 100k Queries per Hour on Hive on TezAchieving 100k Queries per Hour on Hive on Tez
Achieving 100k Queries per Hour on Hive on Tez
 
Migrate Oracle database to Amazon RDS
Migrate Oracle database to Amazon RDSMigrate Oracle database to Amazon RDS
Migrate Oracle database to Amazon RDS
 
Optimizing Apache HBase for Cloud Storage in Microsoft Azure HDInsight
Optimizing Apache HBase for Cloud Storage in Microsoft Azure HDInsightOptimizing Apache HBase for Cloud Storage in Microsoft Azure HDInsight
Optimizing Apache HBase for Cloud Storage in Microsoft Azure HDInsight
 
Using Kafka and Kudu for fast, low-latency SQL analytics on streaming data
Using Kafka and Kudu for fast, low-latency SQL analytics on streaming dataUsing Kafka and Kudu for fast, low-latency SQL analytics on streaming data
Using Kafka and Kudu for fast, low-latency SQL analytics on streaming data
 
AWS June 2016 Webinar Series - Amazon Aurora Deep Dive - Optimizing Database ...
AWS June 2016 Webinar Series - Amazon Aurora Deep Dive - Optimizing Database ...AWS June 2016 Webinar Series - Amazon Aurora Deep Dive - Optimizing Database ...
AWS June 2016 Webinar Series - Amazon Aurora Deep Dive - Optimizing Database ...
 
MySQL and MariaDB
MySQL and MariaDBMySQL and MariaDB
MySQL and MariaDB
 
Azure + DataStax Enterprise (DSE) Powers Office365 Per User Store
Azure + DataStax Enterprise (DSE) Powers Office365 Per User StoreAzure + DataStax Enterprise (DSE) Powers Office365 Per User Store
Azure + DataStax Enterprise (DSE) Powers Office365 Per User Store
 
SQL Server to Redshift Data Load Using SSIS
SQL Server to Redshift Data Load Using SSISSQL Server to Redshift Data Load Using SSIS
SQL Server to Redshift Data Load Using SSIS
 

Viewers also liked

Node.js - async for the rest of us.
Node.js - async for the rest of us.Node.js - async for the rest of us.
Node.js - async for the rest of us.Mike Brevoort
 
Oracle Event Delivery Network (EDN) of SOA Suite 11g
Oracle Event Delivery Network (EDN) of SOA Suite 11gOracle Event Delivery Network (EDN) of SOA Suite 11g
Oracle Event Delivery Network (EDN) of SOA Suite 11gGuido Schmutz
 
How_to_build_GameServer_2
How_to_build_GameServer_2How_to_build_GameServer_2
How_to_build_GameServer_2Peter Rybar
 
MongoDB performance tuning and load testing, NOSQL Now! 2013 Conference prese...
MongoDB performance tuning and load testing, NOSQL Now! 2013 Conference prese...MongoDB performance tuning and load testing, NOSQL Now! 2013 Conference prese...
MongoDB performance tuning and load testing, NOSQL Now! 2013 Conference prese...ronwarshawsky
 
The True State of the Oracle Public Cloud - Dutch Oracle Architects Platform ...
The True State of the Oracle Public Cloud - Dutch Oracle Architects Platform ...The True State of the Oracle Public Cloud - Dutch Oracle Architects Platform ...
The True State of the Oracle Public Cloud - Dutch Oracle Architects Platform ...Lucas Jellema
 
Review Oracle OpenWorld 2015 - Overview, Main themes, Announcements and Future
Review Oracle OpenWorld 2015 - Overview, Main themes, Announcements and FutureReview Oracle OpenWorld 2015 - Overview, Main themes, Announcements and Future
Review Oracle OpenWorld 2015 - Overview, Main themes, Announcements and FutureLucas Jellema
 
Systems on the edge - your stepping stones into Oracle Public PaaS Cloud - AM...
Systems on the edge - your stepping stones into Oracle Public PaaS Cloud - AM...Systems on the edge - your stepping stones into Oracle Public PaaS Cloud - AM...
Systems on the edge - your stepping stones into Oracle Public PaaS Cloud - AM...Lucas Jellema
 
10 Key MongoDB Performance Indicators
10 Key MongoDB Performance Indicators  10 Key MongoDB Performance Indicators
10 Key MongoDB Performance Indicators iammutex
 
Mobile Database and Service Oriented Architecture
Mobile Database and Service Oriented ArchitectureMobile Database and Service Oriented Architecture
Mobile Database and Service Oriented ArchitectureLucas Jellema
 
Introducing Node.js in an Oracle technology environment (including hands-on)
Introducing Node.js in an Oracle technology environment (including hands-on)Introducing Node.js in an Oracle technology environment (including hands-on)
Introducing Node.js in an Oracle technology environment (including hands-on)Lucas Jellema
 
Introducing Oracle Real-Time Integration Business Insight
Introducing Oracle Real-Time Integration Business InsightIntroducing Oracle Real-Time Integration Business Insight
Introducing Oracle Real-Time Integration Business InsightLucas Jellema
 
Gluent New World #02 - SQL-on-Hadoop : A bit of History, Current State-of-the...
Gluent New World #02 - SQL-on-Hadoop : A bit of History, Current State-of-the...Gluent New World #02 - SQL-on-Hadoop : A bit of History, Current State-of-the...
Gluent New World #02 - SQL-on-Hadoop : A bit of History, Current State-of-the...Mark Rittman
 
HMC_Industry_Report_Drone_Technology_160321[1]
HMC_Industry_Report_Drone_Technology_160321[1]HMC_Industry_Report_Drone_Technology_160321[1]
HMC_Industry_Report_Drone_Technology_160321[1]Robert Cheek
 
Oracle Database 12c - Introducing SQL Pattern Recognition through MATCH_RECOG...
Oracle Database 12c - Introducing SQL Pattern Recognition through MATCH_RECOG...Oracle Database 12c - Introducing SQL Pattern Recognition through MATCH_RECOG...
Oracle Database 12c - Introducing SQL Pattern Recognition through MATCH_RECOG...Lucas Jellema
 
What is the Oracle PaaS Cloud for Developers (Oracle Cloud Day, The Netherlan...
What is the Oracle PaaS Cloud for Developers (Oracle Cloud Day, The Netherlan...What is the Oracle PaaS Cloud for Developers (Oracle Cloud Day, The Netherlan...
What is the Oracle PaaS Cloud for Developers (Oracle Cloud Day, The Netherlan...Lucas Jellema
 
Fast querying indexing for performance (4)
Fast querying   indexing for performance (4)Fast querying   indexing for performance (4)
Fast querying indexing for performance (4)MongoDB
 
Ranges, ranges everywhere (Oracle SQL)
Ranges, ranges everywhere (Oracle SQL)Ranges, ranges everywhere (Oracle SQL)
Ranges, ranges everywhere (Oracle SQL)Stew Ashton
 

Viewers also liked (20)

Node.js - async for the rest of us.
Node.js - async for the rest of us.Node.js - async for the rest of us.
Node.js - async for the rest of us.
 
NoSQL and SOA
NoSQL and SOANoSQL and SOA
NoSQL and SOA
 
Oracle Event Delivery Network (EDN) of SOA Suite 11g
Oracle Event Delivery Network (EDN) of SOA Suite 11gOracle Event Delivery Network (EDN) of SOA Suite 11g
Oracle Event Delivery Network (EDN) of SOA Suite 11g
 
How_to_build_GameServer_2
How_to_build_GameServer_2How_to_build_GameServer_2
How_to_build_GameServer_2
 
MongoDB performance tuning and load testing, NOSQL Now! 2013 Conference prese...
MongoDB performance tuning and load testing, NOSQL Now! 2013 Conference prese...MongoDB performance tuning and load testing, NOSQL Now! 2013 Conference prese...
MongoDB performance tuning and load testing, NOSQL Now! 2013 Conference prese...
 
The True State of the Oracle Public Cloud - Dutch Oracle Architects Platform ...
The True State of the Oracle Public Cloud - Dutch Oracle Architects Platform ...The True State of the Oracle Public Cloud - Dutch Oracle Architects Platform ...
The True State of the Oracle Public Cloud - Dutch Oracle Architects Platform ...
 
AMIS Oracle OpenWorld 2013 Review Part 1 - Intro Overview Innovation, Hardwar...
AMIS Oracle OpenWorld 2013 Review Part 1 - Intro Overview Innovation, Hardwar...AMIS Oracle OpenWorld 2013 Review Part 1 - Intro Overview Innovation, Hardwar...
AMIS Oracle OpenWorld 2013 Review Part 1 - Intro Overview Innovation, Hardwar...
 
Review Oracle OpenWorld 2015 - Overview, Main themes, Announcements and Future
Review Oracle OpenWorld 2015 - Overview, Main themes, Announcements and FutureReview Oracle OpenWorld 2015 - Overview, Main themes, Announcements and Future
Review Oracle OpenWorld 2015 - Overview, Main themes, Announcements and Future
 
Systems on the edge - your stepping stones into Oracle Public PaaS Cloud - AM...
Systems on the edge - your stepping stones into Oracle Public PaaS Cloud - AM...Systems on the edge - your stepping stones into Oracle Public PaaS Cloud - AM...
Systems on the edge - your stepping stones into Oracle Public PaaS Cloud - AM...
 
10 Key MongoDB Performance Indicators
10 Key MongoDB Performance Indicators  10 Key MongoDB Performance Indicators
10 Key MongoDB Performance Indicators
 
Mobile Database and Service Oriented Architecture
Mobile Database and Service Oriented ArchitectureMobile Database and Service Oriented Architecture
Mobile Database and Service Oriented Architecture
 
Introducing Node.js in an Oracle technology environment (including hands-on)
Introducing Node.js in an Oracle technology environment (including hands-on)Introducing Node.js in an Oracle technology environment (including hands-on)
Introducing Node.js in an Oracle technology environment (including hands-on)
 
Introducing Oracle Real-Time Integration Business Insight
Introducing Oracle Real-Time Integration Business InsightIntroducing Oracle Real-Time Integration Business Insight
Introducing Oracle Real-Time Integration Business Insight
 
Gluent New World #02 - SQL-on-Hadoop : A bit of History, Current State-of-the...
Gluent New World #02 - SQL-on-Hadoop : A bit of History, Current State-of-the...Gluent New World #02 - SQL-on-Hadoop : A bit of History, Current State-of-the...
Gluent New World #02 - SQL-on-Hadoop : A bit of History, Current State-of-the...
 
HMC_Industry_Report_Drone_Technology_160321[1]
HMC_Industry_Report_Drone_Technology_160321[1]HMC_Industry_Report_Drone_Technology_160321[1]
HMC_Industry_Report_Drone_Technology_160321[1]
 
Oracle Database 12c - Introducing SQL Pattern Recognition through MATCH_RECOG...
Oracle Database 12c - Introducing SQL Pattern Recognition through MATCH_RECOG...Oracle Database 12c - Introducing SQL Pattern Recognition through MATCH_RECOG...
Oracle Database 12c - Introducing SQL Pattern Recognition through MATCH_RECOG...
 
What is the Oracle PaaS Cloud for Developers (Oracle Cloud Day, The Netherlan...
What is the Oracle PaaS Cloud for Developers (Oracle Cloud Day, The Netherlan...What is the Oracle PaaS Cloud for Developers (Oracle Cloud Day, The Netherlan...
What is the Oracle PaaS Cloud for Developers (Oracle Cloud Day, The Netherlan...
 
Fast querying indexing for performance (4)
Fast querying   indexing for performance (4)Fast querying   indexing for performance (4)
Fast querying indexing for performance (4)
 
SQL Outer Joins for Fun and Profit
SQL Outer Joins for Fun and ProfitSQL Outer Joins for Fun and Profit
SQL Outer Joins for Fun and Profit
 
Ranges, ranges everywhere (Oracle SQL)
Ranges, ranges everywhere (Oracle SQL)Ranges, ranges everywhere (Oracle SQL)
Ranges, ranges everywhere (Oracle SQL)
 

Similar to Mining AWR V2 - Trend Analysis

Clock Skew and Other Annoying Realities in Distributed Systems (Donny Nadolny...
Clock Skew and Other Annoying Realities in Distributed Systems (Donny Nadolny...Clock Skew and Other Annoying Realities in Distributed Systems (Donny Nadolny...
Clock Skew and Other Annoying Realities in Distributed Systems (Donny Nadolny...DataStax
 
The Machine Learning behind the Autonomous Database- EMEA Tour Oct 2019
The Machine Learning behind the Autonomous Database- EMEA Tour Oct 2019 The Machine Learning behind the Autonomous Database- EMEA Tour Oct 2019
The Machine Learning behind the Autonomous Database- EMEA Tour Oct 2019 Sandesh Rao
 
DBA Fundamentals Group: Continuous SQL with Kafka and Flink
DBA Fundamentals Group: Continuous SQL with Kafka and FlinkDBA Fundamentals Group: Continuous SQL with Kafka and Flink
DBA Fundamentals Group: Continuous SQL with Kafka and FlinkTimothy Spann
 
Raytheon IIS Hot Jobs - up to a $20K sign on bonus!
Raytheon IIS Hot Jobs - up to a $20K sign on bonus!Raytheon IIS Hot Jobs - up to a $20K sign on bonus!
Raytheon IIS Hot Jobs - up to a $20K sign on bonus!Toni Havlik
 
Real-Time Anomaly Detection with Spark MLlib, Akka and Cassandra
Real-Time Anomaly Detection  with Spark MLlib, Akka and  CassandraReal-Time Anomaly Detection  with Spark MLlib, Akka and  Cassandra
Real-Time Anomaly Detection with Spark MLlib, Akka and CassandraNatalino Busa
 
Grokking Engineering - Data Analytics Infrastructure at Viki - Huy Nguyen
Grokking Engineering - Data Analytics Infrastructure at Viki - Huy NguyenGrokking Engineering - Data Analytics Infrastructure at Viki - Huy Nguyen
Grokking Engineering - Data Analytics Infrastructure at Viki - Huy NguyenHuy Nguyen
 
2024 February 28 - NYC - Meetup Unlocking Financial Data with Real-Time Pipel...
2024 February 28 - NYC - Meetup Unlocking Financial Data with Real-Time Pipel...2024 February 28 - NYC - Meetup Unlocking Financial Data with Real-Time Pipel...
2024 February 28 - NYC - Meetup Unlocking Financial Data with Real-Time Pipel...Timothy Spann
 
HTAP By Accident: Getting More From PostgreSQL Using Hardware Acceleration
HTAP By Accident: Getting More From PostgreSQL Using Hardware AccelerationHTAP By Accident: Getting More From PostgreSQL Using Hardware Acceleration
HTAP By Accident: Getting More From PostgreSQL Using Hardware AccelerationEDB
 
Best Practices for Forwarder Hierarchies
Best Practices for Forwarder HierarchiesBest Practices for Forwarder Hierarchies
Best Practices for Forwarder HierarchiesSplunk
 
Best of .conf21 Session Recommendations
Best of .conf21 Session RecommendationsBest of .conf21 Session Recommendations
Best of .conf21 Session RecommendationsSplunk
 
Chicago AWS user group meetup - May 2014 at Cohesive
Chicago AWS user group meetup - May 2014 at CohesiveChicago AWS user group meetup - May 2014 at Cohesive
Chicago AWS user group meetup - May 2014 at CohesiveAWS Chicago
 
Chicago AWS user group meetup - May 2014 at Cohesive
Chicago AWS user group meetup - May 2014 at CohesiveChicago AWS user group meetup - May 2014 at Cohesive
Chicago AWS user group meetup - May 2014 at CohesiveCloudCamp Chicago
 
Continuous SQL with Apache Streaming (FLaNK and FLiP)
Continuous SQL with Apache Streaming (FLaNK and FLiP)Continuous SQL with Apache Streaming (FLaNK and FLiP)
Continuous SQL with Apache Streaming (FLaNK and FLiP)Timothy Spann
 
Using Multiple Persistence Layers in Spark to Build a Scalable Prediction Eng...
Using Multiple Persistence Layers in Spark to Build a Scalable Prediction Eng...Using Multiple Persistence Layers in Spark to Build a Scalable Prediction Eng...
Using Multiple Persistence Layers in Spark to Build a Scalable Prediction Eng...StampedeCon
 
Fire-fighting java big data problems
Fire-fighting java big data problemsFire-fighting java big data problems
Fire-fighting java big data problemsgrepalex
 
NSA for Enterprises Log Analysis Use Cases
NSA for Enterprises   Log Analysis Use Cases NSA for Enterprises   Log Analysis Use Cases
NSA for Enterprises Log Analysis Use Cases WSO2
 
Whoops, The Numbers Are Wrong! Scaling Data Quality @ Netflix
Whoops, The Numbers Are Wrong! Scaling Data Quality @ NetflixWhoops, The Numbers Are Wrong! Scaling Data Quality @ Netflix
Whoops, The Numbers Are Wrong! Scaling Data Quality @ NetflixDataWorks Summit
 
Scaling Data Quality @ Netflix
Scaling Data Quality @ NetflixScaling Data Quality @ Netflix
Scaling Data Quality @ NetflixMichelle Ufford
 
LendingClub RealTime BigData Platform with Oracle GoldenGate
LendingClub RealTime BigData Platform with Oracle GoldenGateLendingClub RealTime BigData Platform with Oracle GoldenGate
LendingClub RealTime BigData Platform with Oracle GoldenGateRajit Saha
 
VirtaThon 2011 - Mining the AWR
VirtaThon 2011 - Mining the AWRVirtaThon 2011 - Mining the AWR
VirtaThon 2011 - Mining the AWRKristofferson A
 

Similar to Mining AWR V2 - Trend Analysis (20)

Clock Skew and Other Annoying Realities in Distributed Systems (Donny Nadolny...
Clock Skew and Other Annoying Realities in Distributed Systems (Donny Nadolny...Clock Skew and Other Annoying Realities in Distributed Systems (Donny Nadolny...
Clock Skew and Other Annoying Realities in Distributed Systems (Donny Nadolny...
 
The Machine Learning behind the Autonomous Database- EMEA Tour Oct 2019
The Machine Learning behind the Autonomous Database- EMEA Tour Oct 2019 The Machine Learning behind the Autonomous Database- EMEA Tour Oct 2019
The Machine Learning behind the Autonomous Database- EMEA Tour Oct 2019
 
DBA Fundamentals Group: Continuous SQL with Kafka and Flink
DBA Fundamentals Group: Continuous SQL with Kafka and FlinkDBA Fundamentals Group: Continuous SQL with Kafka and Flink
DBA Fundamentals Group: Continuous SQL with Kafka and Flink
 
Raytheon IIS Hot Jobs - up to a $20K sign on bonus!
Raytheon IIS Hot Jobs - up to a $20K sign on bonus!Raytheon IIS Hot Jobs - up to a $20K sign on bonus!
Raytheon IIS Hot Jobs - up to a $20K sign on bonus!
 
Real-Time Anomaly Detection with Spark MLlib, Akka and Cassandra
Real-Time Anomaly Detection  with Spark MLlib, Akka and  CassandraReal-Time Anomaly Detection  with Spark MLlib, Akka and  Cassandra
Real-Time Anomaly Detection with Spark MLlib, Akka and Cassandra
 
Grokking Engineering - Data Analytics Infrastructure at Viki - Huy Nguyen
Grokking Engineering - Data Analytics Infrastructure at Viki - Huy NguyenGrokking Engineering - Data Analytics Infrastructure at Viki - Huy Nguyen
Grokking Engineering - Data Analytics Infrastructure at Viki - Huy Nguyen
 
2024 February 28 - NYC - Meetup Unlocking Financial Data with Real-Time Pipel...
2024 February 28 - NYC - Meetup Unlocking Financial Data with Real-Time Pipel...2024 February 28 - NYC - Meetup Unlocking Financial Data with Real-Time Pipel...
2024 February 28 - NYC - Meetup Unlocking Financial Data with Real-Time Pipel...
 
HTAP By Accident: Getting More From PostgreSQL Using Hardware Acceleration
HTAP By Accident: Getting More From PostgreSQL Using Hardware AccelerationHTAP By Accident: Getting More From PostgreSQL Using Hardware Acceleration
HTAP By Accident: Getting More From PostgreSQL Using Hardware Acceleration
 
Best Practices for Forwarder Hierarchies
Best Practices for Forwarder HierarchiesBest Practices for Forwarder Hierarchies
Best Practices for Forwarder Hierarchies
 
Best of .conf21 Session Recommendations
Best of .conf21 Session RecommendationsBest of .conf21 Session Recommendations
Best of .conf21 Session Recommendations
 
Chicago AWS user group meetup - May 2014 at Cohesive
Chicago AWS user group meetup - May 2014 at CohesiveChicago AWS user group meetup - May 2014 at Cohesive
Chicago AWS user group meetup - May 2014 at Cohesive
 
Chicago AWS user group meetup - May 2014 at Cohesive
Chicago AWS user group meetup - May 2014 at CohesiveChicago AWS user group meetup - May 2014 at Cohesive
Chicago AWS user group meetup - May 2014 at Cohesive
 
Continuous SQL with Apache Streaming (FLaNK and FLiP)
Continuous SQL with Apache Streaming (FLaNK and FLiP)Continuous SQL with Apache Streaming (FLaNK and FLiP)
Continuous SQL with Apache Streaming (FLaNK and FLiP)
 
Using Multiple Persistence Layers in Spark to Build a Scalable Prediction Eng...
Using Multiple Persistence Layers in Spark to Build a Scalable Prediction Eng...Using Multiple Persistence Layers in Spark to Build a Scalable Prediction Eng...
Using Multiple Persistence Layers in Spark to Build a Scalable Prediction Eng...
 
Fire-fighting java big data problems
Fire-fighting java big data problemsFire-fighting java big data problems
Fire-fighting java big data problems
 
NSA for Enterprises Log Analysis Use Cases
NSA for Enterprises   Log Analysis Use Cases NSA for Enterprises   Log Analysis Use Cases
NSA for Enterprises Log Analysis Use Cases
 
Whoops, The Numbers Are Wrong! Scaling Data Quality @ Netflix
Whoops, The Numbers Are Wrong! Scaling Data Quality @ NetflixWhoops, The Numbers Are Wrong! Scaling Data Quality @ Netflix
Whoops, The Numbers Are Wrong! Scaling Data Quality @ Netflix
 
Scaling Data Quality @ Netflix
Scaling Data Quality @ NetflixScaling Data Quality @ Netflix
Scaling Data Quality @ Netflix
 
LendingClub RealTime BigData Platform with Oracle GoldenGate
LendingClub RealTime BigData Platform with Oracle GoldenGateLendingClub RealTime BigData Platform with Oracle GoldenGate
LendingClub RealTime BigData Platform with Oracle GoldenGate
 
VirtaThon 2011 - Mining the AWR
VirtaThon 2011 - Mining the AWRVirtaThon 2011 - Mining the AWR
VirtaThon 2011 - Mining the AWR
 

More from Maris Elsins

DB12c: All You Need to Know About the Resource Manager
DB12c: All You Need to Know About the Resource ManagerDB12c: All You Need to Know About the Resource Manager
DB12c: All You Need to Know About the Resource ManagerMaris Elsins
 
C15LV: Ins and Outs of Concurrent Processing Configuration in Oracle e-Busine...
C15LV: Ins and Outs of Concurrent Processing Configuration in Oracle e-Busine...C15LV: Ins and Outs of Concurrent Processing Configuration in Oracle e-Busine...
C15LV: Ins and Outs of Concurrent Processing Configuration in Oracle e-Busine...Maris Elsins
 
Mining the AWR: Alternative Methods for Identification of the Top SQLs (inclu...
Mining the AWR: Alternative Methods for Identification of the Top SQLs (inclu...Mining the AWR: Alternative Methods for Identification of the Top SQLs (inclu...
Mining the AWR: Alternative Methods for Identification of the Top SQLs (inclu...Maris Elsins
 
Database as a Service on the Oracle Database Appliance Platform
Database as a Service on the Oracle Database Appliance PlatformDatabase as a Service on the Oracle Database Appliance Platform
Database as a Service on the Oracle Database Appliance PlatformMaris Elsins
 
LVOUG meetup #2 - Forcing SQL Execution Plan Instability
LVOUG meetup #2 - Forcing SQL Execution Plan InstabilityLVOUG meetup #2 - Forcing SQL Execution Plan Instability
LVOUG meetup #2 - Forcing SQL Execution Plan InstabilityMaris Elsins
 
OUG Harmony 2012 - Using SQL Plan Baselines for Performance Testing
OUG Harmony 2012 -  Using SQL Plan Baselines for Performance TestingOUG Harmony 2012 -  Using SQL Plan Baselines for Performance Testing
OUG Harmony 2012 - Using SQL Plan Baselines for Performance TestingMaris Elsins
 
LVOUG meetup #4 - Case Study 10g to 11g
LVOUG meetup #4 - Case Study 10g to 11gLVOUG meetup #4 - Case Study 10g to 11g
LVOUG meetup #4 - Case Study 10g to 11gMaris Elsins
 
Surviving the Crisis With the Help of Oracle Database Resource Manager
Surviving the Crisis With the Help of Oracle Database Resource ManagerSurviving the Crisis With the Help of Oracle Database Resource Manager
Surviving the Crisis With the Help of Oracle Database Resource ManagerMaris Elsins
 
Concurrent Processing Performance Analysis for Apps DBAs
Concurrent Processing Performance Analysis for Apps DBAsConcurrent Processing Performance Analysis for Apps DBAs
Concurrent Processing Performance Analysis for Apps DBAsMaris Elsins
 
Simplify Consolidation with Oracle Database 12c
Simplify Consolidation with Oracle Database 12cSimplify Consolidation with Oracle Database 12c
Simplify Consolidation with Oracle Database 12cMaris Elsins
 
10 ways to improve your rman script
10 ways to improve your rman script10 ways to improve your rman script
10 ways to improve your rman scriptMaris Elsins
 
Wildcard13 - warmup slides for the "Roundtable discussion with Oracle Profess...
Wildcard13 - warmup slides for the "Roundtable discussion with Oracle Profess...Wildcard13 - warmup slides for the "Roundtable discussion with Oracle Profess...
Wildcard13 - warmup slides for the "Roundtable discussion with Oracle Profess...Maris Elsins
 
Whitepaper: Running Oracle e-Business Suite Database on Oracle Database Appli...
Whitepaper: Running Oracle e-Business Suite Database on Oracle Database Appli...Whitepaper: Running Oracle e-Business Suite Database on Oracle Database Appli...
Whitepaper: Running Oracle e-Business Suite Database on Oracle Database Appli...Maris Elsins
 
Running E-Business Suite Database on Oracle Database Appliance
Running E-Business Suite Database on Oracle Database ApplianceRunning E-Business Suite Database on Oracle Database Appliance
Running E-Business Suite Database on Oracle Database ApplianceMaris Elsins
 
Internals of concurent managers
Internals of concurent managersInternals of concurent managers
Internals of concurent managersMaris Elsins
 
Using SQL Plan Management for Performance Testing
Using SQL Plan Management for Performance TestingUsing SQL Plan Management for Performance Testing
Using SQL Plan Management for Performance TestingMaris Elsins
 

More from Maris Elsins (16)

DB12c: All You Need to Know About the Resource Manager
DB12c: All You Need to Know About the Resource ManagerDB12c: All You Need to Know About the Resource Manager
DB12c: All You Need to Know About the Resource Manager
 
C15LV: Ins and Outs of Concurrent Processing Configuration in Oracle e-Busine...
C15LV: Ins and Outs of Concurrent Processing Configuration in Oracle e-Busine...C15LV: Ins and Outs of Concurrent Processing Configuration in Oracle e-Busine...
C15LV: Ins and Outs of Concurrent Processing Configuration in Oracle e-Busine...
 
Mining the AWR: Alternative Methods for Identification of the Top SQLs (inclu...
Mining the AWR: Alternative Methods for Identification of the Top SQLs (inclu...Mining the AWR: Alternative Methods for Identification of the Top SQLs (inclu...
Mining the AWR: Alternative Methods for Identification of the Top SQLs (inclu...
 
Database as a Service on the Oracle Database Appliance Platform
Database as a Service on the Oracle Database Appliance PlatformDatabase as a Service on the Oracle Database Appliance Platform
Database as a Service on the Oracle Database Appliance Platform
 
LVOUG meetup #2 - Forcing SQL Execution Plan Instability
LVOUG meetup #2 - Forcing SQL Execution Plan InstabilityLVOUG meetup #2 - Forcing SQL Execution Plan Instability
LVOUG meetup #2 - Forcing SQL Execution Plan Instability
 
OUG Harmony 2012 - Using SQL Plan Baselines for Performance Testing
OUG Harmony 2012 -  Using SQL Plan Baselines for Performance TestingOUG Harmony 2012 -  Using SQL Plan Baselines for Performance Testing
OUG Harmony 2012 - Using SQL Plan Baselines for Performance Testing
 
LVOUG meetup #4 - Case Study 10g to 11g
LVOUG meetup #4 - Case Study 10g to 11gLVOUG meetup #4 - Case Study 10g to 11g
LVOUG meetup #4 - Case Study 10g to 11g
 
Surviving the Crisis With the Help of Oracle Database Resource Manager
Surviving the Crisis With the Help of Oracle Database Resource ManagerSurviving the Crisis With the Help of Oracle Database Resource Manager
Surviving the Crisis With the Help of Oracle Database Resource Manager
 
Concurrent Processing Performance Analysis for Apps DBAs
Concurrent Processing Performance Analysis for Apps DBAsConcurrent Processing Performance Analysis for Apps DBAs
Concurrent Processing Performance Analysis for Apps DBAs
 
Simplify Consolidation with Oracle Database 12c
Simplify Consolidation with Oracle Database 12cSimplify Consolidation with Oracle Database 12c
Simplify Consolidation with Oracle Database 12c
 
10 ways to improve your rman script
10 ways to improve your rman script10 ways to improve your rman script
10 ways to improve your rman script
 
Wildcard13 - warmup slides for the "Roundtable discussion with Oracle Profess...
Wildcard13 - warmup slides for the "Roundtable discussion with Oracle Profess...Wildcard13 - warmup slides for the "Roundtable discussion with Oracle Profess...
Wildcard13 - warmup slides for the "Roundtable discussion with Oracle Profess...
 
Whitepaper: Running Oracle e-Business Suite Database on Oracle Database Appli...
Whitepaper: Running Oracle e-Business Suite Database on Oracle Database Appli...Whitepaper: Running Oracle e-Business Suite Database on Oracle Database Appli...
Whitepaper: Running Oracle e-Business Suite Database on Oracle Database Appli...
 
Running E-Business Suite Database on Oracle Database Appliance
Running E-Business Suite Database on Oracle Database ApplianceRunning E-Business Suite Database on Oracle Database Appliance
Running E-Business Suite Database on Oracle Database Appliance
 
Internals of concurent managers
Internals of concurent managersInternals of concurent managers
Internals of concurent managers
 
Using SQL Plan Management for Performance Testing
Using SQL Plan Management for Performance TestingUsing SQL Plan Management for Performance Testing
Using SQL Plan Management for Performance Testing
 

Recently uploaded

Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 

Recently uploaded (20)

Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 

Mining AWR V2 - Trend Analysis

  • 1. © 2016 Pythian 1 Mining AWR V2 Trend Analysis MARIS ELSINS Lead Database Consultant Can you read the line below? Can you read the line below? This is the font size I use for listing code in slides!
  • 2. © 2016 Pythian 2 Maris Elsins Lead Database Consultant At Pythian since 2011 Located in Riga, Latvia Oracle [Apps] DBA since 2005 Speaker at conferences since 2007 @MarisDBA elsins@pythian.com http://bit.ly/getMOSPatchV2
  • 3. © 2016 Pythian 3 ABOUT PYTHIAN Pythian’s 400+ IT professionals help companies adopt and manage disruptive technologies to better compete
  • 4. © 2016 Pythian 4 Systems currently managed by Pythian EXPERIENCED Pythian experts in 35 countries GLOBAL Millennia of experience gathered and shared over 19 years EXPERTS 11,800 2400
  • 5. © 2016 Pythian 5 • “1-Dot” Philosophy • • “2-Dots” Philosophy • • • Data trends in AWR • Examples AGENDA
  • 6. © 2016 Pythian 6 LET'S OVERSIMPLIFY WHAT IS AN AWR REPORT? It's a dot ! •
  • 7. © 2016 Pythian 7 LET'S OVERSIMPLIFY SERIOUSLY? A DOT??? Are you gone totally nuts? Photo by herr_hartmann / CC BY-NC 2.0
  • 8. © 2016 Pythian 8 • AWR Report gives you valuable drill-down capabilities (time interval): – Top Wait Events – Top SQL Statements in different categories – Top Segments by Logical Reads – ... LET'S OVERSIMPLIFY AWR REPORT AS A "DOT"! THINK ABOUT IT!
  • 9. © 2016 Pythian 9 DOTS AND AWR - LET'S INVESTIGATE! HOW DID THE IO PERFORM ON SEPTEMBER 9? - AWR REPORT IS THE ANSWER!
  • 10. © 2016 Pythian 10 LET'S OVERSIMPLIFY AWR REPORT AS A "DOT"! THINK ABOUT IT! • Lot of resource usage / performance information is aggregated down to a single number (a "dot" on a time/value graph) – How much time was spent waiting on User I/O? = 42189 s – How quickly did the db file sequential reads respond? = 0.84 ms – How many transactions per second are completed? = 47.09
  • 11. © 2016 Pythian 11 LET'S OVERSIMPLIFY DB FILE SEQUENTIAL READS PERFORMANCE AS A "DOT" Time Resp. time 09-Sep-16 0.84 ms
  • 12. © 2016 Pythian 12 "The FBI Academy teaches new agents that the best predictor of future behavior is past behavior." Ronald Kessler Who doesn't want to be an FBI agent specializing in database performance analysis? A “dot” doesn't reveal the past behaviour WHY THIS IS IMPORTANT?
  • 13. © 2016 Pythian 13 1-DOT What does it tell us about how things develop over time? Time Value S1 V1
  • 14. © 2016 Pythian 14 DOTS AND AWR COMPARING TWO PERIODS OF TIME (AWR DIFF REPORT)
  • 15. © 2016 Pythian 15 What does it tell us about how things develop over time? 2-DOTS Time Value S1 V1 V2 S2
  • 16. © 2016 Pythian 16 2-DOTS What does it tell us about how things develop over time? Time Value S1 V1 V2 S2
  • 17. © 2016 Pythian 17 DOTS AND AWR • An AWR report describes the time interval between 2 snapshots i.e. – How much time was spent on CPU? – How many buffer gets did a particular query do? – How many Physical IOs did a top query do? – ... etc ... • A single aggregated value, that describes the reporting interval, which is insufficient for trend analysis
  • 18. © 2016 Pythian 18 IS IT WORTH MINING AWR? Trends in AWR
  • 19. © 2016 Pythian 19 MINING DATA TRENDS IN AWR • Each AWR snapshot represents a moment in time. • Multitude of statistics are saved for each snapshot • It's an obvious thing to graph these values! • And the best about it is you pick the metric to graph!
  • 20. © 2016 Pythian 20 SQL> @awr_wait_trend.sql "db file sequential read" 10 1 TIME (SNAP) EVENT_NAME TOTAL_WAITS TOTAL_TIME_S AVG_TIME_MS ------------------- ---------------------------------------------------------------- --------------- -------------- -------------- .... 09.09.2016 00:00:00 db file sequential read 55302 50.670 .916 09.09.2016 01:00:00 db file sequential read 45372 31.303 .690 09.09.2016 02:00:00 db file sequential read 80171 68.995 .861 09.09.2016 03:00:00 db file sequential read 215704 235.555 1.092 09.09.2016 04:00:00 db file sequential read 67104 46.547 .694 09.09.2016 05:00:00 db file sequential read 172241 104.396 .606 09.09.2016 06:00:00 db file sequential read 65497 36.598 .559 09.09.2016 07:00:00 db file sequential read 76487 46.231 .604 09.09.2016 08:00:00 db file sequential read 53193 27.399 .515 09.09.2016 09:00:00 db file sequential read 78568 45.846 .584 09.09.2016 10:00:00 db file sequential read 88612 48.192 .544 09.09.2016 11:00:00 db file sequential read 71483 42.597 .596 09.09.2016 12:00:00 db file sequential read 79741 53.432 .670 09.09.2016 13:00:00 db file sequential read 89707 65.399 .729 09.09.2016 14:00:00 db file sequential read 85208 49.717 .583 09.09.2016 15:00:00 db file sequential read 125878 99.274 .789 09.09.2016 16:00:00 db file sequential read 71224 39.754 .558 09.09.2016 17:00:00 db file sequential read 78324 46.832 .598 09.09.2016 18:00:00 db file sequential read 72536 67.021 .924 09.09.2016 19:00:00 db file sequential read 49199 37.167 .755 09.09.2016 20:00:00 db file sequential read 47840 26.727 .559 ... DOTS AND AWR HOW DID THE IO PERFORM ON SEPTEMBER 9?
  • 21. © 2016 Pythian 21 DOTS AND AWR HOW DID THE IO PERFORM ON SEPTEMBER 9?
  • 22. © 2016 Pythian 22 DOTS AND AWR DO YOU STILL REMEMBER THIS PICTURE?
  • 23. © 2016 Pythian 23 DOTS AND AWR HOW DID THE IO PERFORM BETWEEN SEPTEMBER 2 AND 9?
  • 24. © 2016 Pythian 24 DOTS AND AWR TOTAL WAITS COMPARISON BETWEEN SEPTEMBER 2 AND 9?
  • 25. © 2016 Pythian 25 DOTS AND AWR RESPONSE TIME COMPARISON BETWEEN SEPTEMBER 2 AND 9?
  • 26. © 2016 Pythian 26 HOW DID I DO IT? Extracting the “Past Behaviour” from AWR
  • 27. © 2016 Pythian 27 Information on the DBA_HIST_views can be found in Oracle® Database Reference 12c Release 2 (12.2) http://docs.oracle.com/database/122/REFRN/toc.htm SELECT v.snap_id, v.value FROM dba_hist_sysstat v WHERE v.stat_name = 'user commits' ORDER BY v.snap_id; SNAP_ID VALUE ---------- ---------- 12621 625766 12622 626608 12623 627853 12624 629348 12625 630130 12626 630904 .... HOW DID I DO IT? STEP 1: PICK THE METRIC AND FIND THE CORRECT DBA_HIST_% VIEW
  • 28. © 2016 Pythian 28 SELECT Lag(snap_id) over (ORDER BY v.snap_id) from_snap, v.snap_id to_snap, v.value - Lag(v.value) over (ORDER BY v.snap_id) delta_value FROM dba_hist_sysstat v WHERE v.stat_name = 'user commits' ORDER BY v.snap_id; FROM_SNAP TO_SNAP DELTA_VALUE ---------- ---------- ----------- 12621 12621 12622 842 12622 12623 1245 12623 12624 1495 12624 12625 782 12625 12626 774 ... HOW DID I DO IT? STEP 2: CALCULATE DELTAS
  • 29. © 2016 Pythian 29 SELECT Lag(s.end_interval_time) over (PARTITION BY s.dbid, s.startup_time ORDER BY v.snap_id) from_time, s.end_interval_time to_time, v.value - Lag(v.value) over (PARTITION BY s.dbid, s.startup_time ORDER BY v.snap_id) delta_value FROM dba_hist_sysstat v, dba_hist_snapshot s WHERE v.stat_name = 'user commits' AND s.snap_id = v.snap_id ORDER BY s.end_interval_time; FROM_TIME TO_TIME DELTA_VALUE ------------------------------- ------------------------------- ----------- 09-SEP-16 04.00.44.539000000 PM 09-SEP-16 04.00.44.539000000 PM 09-SEP-16 05.00.58.620000000 PM 842 09-SEP-16 05.00.58.620000000 PM 09-SEP-16 06.00.22.386000000 PM 1245 09-SEP-16 06.00.22.386000000 PM 09-SEP-16 07.00.35.070000000 PM 1495 09-SEP-16 07.00.35.070000000 PM 09-SEP-16 08.00.45.075000000 PM 782 09-SEP-16 08.00.45.075000000 PM 09-SEP-16 09.00.54.573000000 PM 774 09-SEP-16 09.00.54.573000000 PM 09-SEP-16 10.00.04.401000000 PM 768 ... HOW DID I DO IT? STEP 3: VIEWER FRIENDLY DATES
  • 30. © 2016 Pythian 30 HOW DID I DO IT? STEP 4: TIMELINE FILTERING SELECT * FROM (SELECT Lag(s.end_interval_time) over (PARTITION BY s.dbid, s.startup_time ORDER BY v.snap_id) from_time, s.end_interval_time to_time, v.value - Lag(v.value) over (PARTITION BY s.dbid, s.startup_time ORDER BY v.snap_id) delta_value FROM dba_hist_sysstat v, dba_hist_snapshot s WHERE v.stat_name = 'user commits' AND s.snap_id = v.snap_id) WHERE from_time BETWEEN To_date('11092016', 'DDMMYYYY') AND To_date('16092016', 'DDMMYYYY') ORDER BY from_time; FROM_TIME TO_TIME DELTA_VALUE ------------------------------- ------------------------------- ----------- 11-SEP-16 12.00.05.638000000 AM 11-SEP-16 01.00.23.855000000 AM 785 11-SEP-16 01.00.23.855000000 AM 11-SEP-16 02.00.40.073000000 AM 1057 11-SEP-16 02.00.40.073000000 AM 11-SEP-16 03.00.46.109000000 AM 1096 ... 15-SEP-16 09.00.04.192000000 PM 15-SEP-16 10.00.16.087000000 PM 786 15-SEP-16 10.00.16.087000000 PM 15-SEP-16 11.00.35.078000000 PM 779 15-SEP-16 11.00.35.078000000 PM 16-SEP-16 12.00.51.092000000 AM 831
  • 31. © 2016 Pythian 31 HOW DID I DO IT? STEP 5: AGGREGATION SELECT Trunc(from_time, 'DD') t_from_time, SUM(delta_value) sum_delta_value FROM (SELECT Lag(s.end_interval_time) over (PARTITION BY s.dbid, s.startup_time ORDER BY v.snap_id) from_time, s.end_interval_time to_time, v.value - Lag(v.value) over (PARTITION BY s.dbid, s.startup_time ORDER BY v.snap_id) delta_value FROM dba_hist_sysstat v, dba_hist_snapshot s WHERE v.stat_name = 'user commits' AND s.snap_id = v.snap_id) WHERE from_time BETWEEN To_date('11092016', 'DDMMYYYY') AND To_date('16092016', 'DDMMYYYY') GROUP BY Trunc(from_time, 'DD') ORDER BY t_from_time; T_FROM_TIME SUM_DELTA_VALUE ------------------------------- --------------- 11.09.2016 00:00:00 21602 12.09.2016 00:00:00 29173 13.09.2016 00:00:00 32772 14.09.2016 00:00:00 30477 15.09.2016 00:00:00 26799
  • 32. © 2016 Pythian 32 HOW DO I DO IT? STEP 6: VISUALIZATION
  • 33. © 2016 Pythian 33 EXAMPLE 1 SQL Performance
  • 34. © 2016 Pythian 34 EXAMPLE 1 THE PROBLEM • Amazon RDS for Oracle – db.m3.xlarge (4 vCPU, 15GiB) – 11.2.0.4 • Alert from the client – Could you please take a look at the DB utilization in prod? We're seeing 100% utilization and 795 connections. Could you please let us know if any specific connection is causing high CPU utilization.
  • 35. © 2016 Pythian 35 EXAMPLE 1 5MIN ASH 10:21:04 SQL> @ashtop session_id,sql_id "event is null" sysdate-5/25/60 sysdate Total Seconds AAS %This SESSION_ID SQL_ID FIRST_SEEN LAST_SEEN ... --------- ------- ------- ---------- ------------- ------------------- ------------------- ... 285 1.0 12% | 738 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ... 285 1.0 12% | 1336 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ... 285 1.0 12% | 1358 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ... 284 1.0 12% | 745 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ... 284 1.0 12% | 882 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ... 284 1.0 12% | 2046 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ... 99 .3 4% | 1472 grbz54xqkr425 2016-06-06 10:17:04 2016-06-06 10:18:43 ... 64 .2 3% | 1472 fy4c407vamaks 2016-06-06 10:18:52 2016-06-06 10:21:26 ... 37 .1 2% | 2176 2016-06-06 10:18:29 2016-06-06 10:19:50 ... 22 .1 1% | 977 7tdudtm4x03np 2016-06-06 10:16:40 2016-06-06 10:17:01 ... 16 .1 1% | 795 3b8s69ct88pur 2016-06-06 10:16:40 2016-06-06 10:18:13 ... 15 .1 1% | 989 2016-06-06 10:17:04 2016-06-06 10:17:19 ... 13 .0 1% | 632 gdhy97b59bk81 2016-06-06 10:16:46 2016-06-06 10:17:07 ... 11 .0 0% | 1792 2016-06-06 10:16:59 2016-06-06 10:21:09 ... 11 .0 0% | 2133 atmhpvm759a97 2016-06-06 10:16:50 2016-06-06 10:21:02 ... Thank you, Tanel! http://blog.tanelpoder.com/files/scripts/ash/ashtop.sql
  • 36. © 2016 Pythian 36 EXAMPLE 1 5MIN ASH 10:21:04 SQL> @ashtop session_id,sql_id "event is null" sysdate-5/25/60 sysdate Total Seconds AAS %This SESSION_ID SQL_ID FIRST_SEEN LAST_SEEN ... --------- ------- ------- ---------- ------------- ------------------- ------------------- ... 285 1.0 12% | 738 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ... 285 1.0 12% | 1336 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ... 285 1.0 12% | 1358 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ... 284 1.0 12% | 745 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ... 284 1.0 12% | 882 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ... 284 1.0 12% | 2046 4db73upm43ck1 2016-06-06 10:16:40 2016-06-06 10:21:27 ... 99 .3 4% | 1472 grbz54xqkr425 2016-06-06 10:17:04 2016-06-06 10:18:43 ... 64 .2 3% | 1472 fy4c407vamaks 2016-06-06 10:18:52 2016-06-06 10:21:26 ... 37 .1 2% | 2176 2016-06-06 10:18:29 2016-06-06 10:19:50 ... 22 .1 1% | 977 7tdudtm4x03np 2016-06-06 10:16:40 2016-06-06 10:17:01 ... 16 .1 1% | 795 3b8s69ct88pur 2016-06-06 10:16:40 2016-06-06 10:18:13 ... 15 .1 1% | 989 2016-06-06 10:17:04 2016-06-06 10:17:19 ... 13 .0 1% | 632 gdhy97b59bk81 2016-06-06 10:16:46 2016-06-06 10:17:07 ... 11 .0 0% | 1792 2016-06-06 10:16:59 2016-06-06 10:21:09 ... 11 .0 0% | 2133 atmhpvm759a97 2016-06-06 10:16:50 2016-06-06 10:21:02 ... Thank you, Tanel! http://blog.tanelpoder.com/files/scripts/ash/ashtop.sql
  • 37. © 2016 Pythian 37 Just one query to address! How hard can it be? EXAMPLE 1 SQL PERFORMANCE
  • 38. © 2016 Pythian 38 EXAMPLE 1 THE EXECUTION PLAN 10:26:35 SQL> select * from table(dbms_xplan.display_awr('4db73upm43ck1',82218884)); Plan hash value: 82218884 -------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | -------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | | 54163 (100)| | | 1 | TEMP TABLE TRANSFORMATION | | | | | | | | 2 | LOAD AS SELECT | | | | | | | | 3 | VIEW | | 179K| 13M| | 10337 (1)| 00:02:05 | | 4 | HASH JOIN | | 179K| 9830K| 5800K| 10337 (1)| 00:02:05 | | 5 | TABLE ACCESS FULL | LEARNING_IMPACT_BY_TOPIC | 179K| 3686K| | 794 (1)| 00:00:10 | | 6 | TABLE ACCESS FULL | ACTIVE_USER_VIEWS_BY_TOPIC | 1543K| 51M| | 5823 (1)| 00:01:10 | | 7 | VIEW | | 1 | 13 | | 2 (0)| 00:00:01 | | 8 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 | | 9 | LOAD AS SELECT | | | | | | | | 10 | VIEW | | 110K| 8415K| | 10228 (1)| 00:02:03 | | 11 | HASH JOIN | | 110K| 6042K| 3568K| 10228 (1)| 00:02:03 | | 12 | TABLE ACCESS FULL | LEARNING_IMPACT_BY_TOPIC | 110K| 2265K| | 794 (1)| 00:00:10 | | 13 | TABLE ACCESS FULL | ACTIVE_USER_VIEWS_BY_TOPIC | 1543K| 51M| | 5823 (1)| 00:01:10 | | 14 | VIEW | | 1 | 13 | | 2 (0)| 00:00:01 | | 15 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 | ... 1
  • 39. © 2016 Pythian 39 EXAMPLE 1 THE EXECUTION PLAN ... | 16 | LOAD AS SELECT | | | | | | | | 17 | INTERSECTION | | | | | | | | 18 | SORT UNIQUE | | 179K| 7021K| 8472K| 2359 (1)| 00:00:29 | | 19 | VIEW | | 179K| 7021K| | 518 (1)| 00:00:07 | | 20 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFD_AAF67829 | 179K| 4388K| | 518 (1)| 00:00:07 | | 21 | SORT UNIQUE | | 110K| 4315K| 5208K| 1452 (1)| 00:00:18 | | 22 | VIEW | | 110K| 4315K| | 319 (1)| 00:00:04 | | 23 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFE_AAF67829 | 110K| 2697K| | 319 (1)| 00:00:04 | | 24 | LOAD AS SELECT | | | | | | | | 25 | WINDOW BUFFER | | 1 | 27 | | 860 (1)| 00:00:11 | | 26 | HASH GROUP BY | | 1 | 27 | | 860 (1)| 00:00:11 | | 27 | VIEW | | 110K| 2913K| | 856 (1)| 00:00:11 | | 28 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFF_AAF67829 | 110K| 4315K| | 856 (1)| 00:00:11 | | 29 | LOAD AS SELECT | | | | | | | | 30 | WINDOW BUFFER | | 42 | 756 | | 523 (2)| 00:00:07 | | 31 | HASH GROUP BY | | 42 | 756 | | 523 (2)| 00:00:07 | | 32 | VIEW | | 179K| 3159K| | 518 (1)| 00:00:07 | | 33 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFD_AAF67829 | 179K| 4388K| | 518 (1)| 00:00:07 | | 34 | LOAD AS SELECT | | | | | | | | 35 | WINDOW BUFFER | | 42 | 756 | | 322 (2)| 00:00:04 | | 36 | HASH GROUP BY | | 42 | 756 | | 322 (2)| 00:00:04 | | 37 | VIEW | | 110K| 1942K| | 319 (1)| 00:00:04 | ... 2
  • 40. © 2016 Pythian 40 EXAMPLE 1 THE EXECUTION PLAN ... | 38 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFE_AAF67829 | 110K| 2697K| | 319 (1)| 00:00:04 | | 39 | FILTER | | | | | | | | 40 | SORT GROUP BY ROLLUP | | 1 | 579 | | 28077 (1)| 00:05:37 | | 41 | MERGE JOIN OUTER | | 10 | 5790 | | 28076 (1)| 00:05:37 | | 42 | MERGE JOIN OUTER | | 10 | 5790 | | 20379 (1)| 00:04:05 | | 43 | HASH JOIN OUTER | | 10 | 5660 | | 11818 (1)| 00:02:22 | | 44 | HASH JOIN OUTER | | 1 | 526 | | 11705 (1)| 00:02:21 | | 45 | HASH JOIN OUTER | | 1 | 495 | | 11383 (1)| 00:02:17 | | 46 | HASH JOIN OUTER | | 1 | 464 | | 10860 (1)| 00:02:11 | | 47 | HASH JOIN OUTER | | 1 | 407 | | 6041 (1)| 00:01:13 | | 48 | HASH JOIN OUTER | | 1 | 389 | | 6039 (1)| 00:01:13 | | 49 | HASH JOIN OUTER | | 1 | 371 | | 6037 (1)| 00:01:13 | | 50 | HASH JOIN OUTER | | 1 | 327 | | 5266 (1)| 00:01:04 | | 51 | HASH JOIN OUTER | | 1 | 296 | | 1603 (1)| 00:00:20 | | 52 | VIEW | | 1 | 148 | | 802 (1)| 00:00:10 | | 53 | HASH GROUP BY | | 1 | 75 | | 802 (1)| 00:00:10 | | 54 | HASH JOIN OUTER | | 9 | 675 | | 801 (1)| 00:00:10 | | 55 | TABLE ACCESS BY INDEX ROWID | ACTIVE_USER_VIEWS_BY_TOPIC | 7 | 217 | | 8 (0)| 00:00:01 | | 56 | INDEX RANGE SCAN | AUVBT_BY_PPID1_IX1 | 7 | | | 5 (0)| 00:00:01 | | 57 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 | | 58 | TABLE ACCESS FULL | LEARNING_IMPACT_BY_TOPIC | 179K| 7723K| | 792 (1)| 00:00:10 | | 59 | VIEW | | 1 | 148 | | 801 (1)| 00:00:10 | ... 3
  • 41. © 2016 Pythian 41 EXAMPLE 1 THE EXECUTION PLAN ... | 60 | HASH GROUP BY | | 1 | 75 | | 801 (1)| 00:00:10 | | 61 | HASH JOIN OUTER | | 8 | 600 | | 800 (1)| 00:00:10 | | 62 | TABLE ACCESS BY INDEX ROWID | ACTIVE_USER_VIEWS_BY_TOPIC | 7 | 217 | | 8 (0)| 00:00:01 | | 63 | INDEX RANGE SCAN | AUVBT_BY_PPID1_IX1 | 7 | | | 5 (0)| 00:00:01 | | 64 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 | | 65 | TABLE ACCESS FULL | LEARNING_IMPACT_BY_TOPIC | 110K| 4747K| | 792 (1)| 00:00:10 | | 66 | VIEW | | 1 | 31 | | 3663 (1)| 00:00:44 | | 67 | HASH JOIN | | 1 | 62 | | 3663 (1)| 00:00:44 | | 68 | VIEW | | 1 | 31 | | 1658 (1)| 00:00:20 | | 69 | HASH GROUP BY | | 1 | 96 | | 1658 (1)| 00:00:20 | | 70 | HASH JOIN | | 1 | 96 | | 1657 (1)| 00:00:20 | | 71 | NESTED LOOPS | | 1 | 75 | | 863 (1)| 00:00:11 | | 72 | NESTED LOOPS | | 7 | 75 | | 863 (1)| 00:00:11 | | 73 | VIEW | | 1 | 40 | | 856 (1)| 00:00:11 | | 74 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFF_AAF67829 | 1 | 40 | | 856 (1)| 00:00:11 | | 75 | INDEX RANGE SCAN | AUVBT_BY_PPID1_IX1 | 7 | | | 4 (0)| 00:00:01 | | 76 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 | | 77 | TABLE ACCESS BY INDEX ROWID| ACTIVE_USER_VIEWS_BY_TOPIC | 1 | 35 | | 7 (0)| 00:00:01 | | 78 | TABLE ACCESS FULL | LEARNING_IMPACT_BY_TOPIC | 179K| 3686K| | 794 (1)| 00:00:10 | | 79 | VIEW | | 1 | 31 | | 2004 (1)| 00:00:25 | | 80 | HASH GROUP BY | | 1 | 96 | | 2004 (1)| 00:00:25 | | 81 | HASH JOIN | | 1 | 96 | | 2003 (1)| 00:00:25 | ... 4
  • 42. © 2016 Pythian 42 EXAMPLE 1 THE EXECUTION PLAN ... | 82 | NESTED LOOPS | | 1 | 75 | | 1209 (1)| 00:00:15 | | 83 | NESTED LOOPS | | 987 | 75 | | 1209 (1)| 00:00:15 | | 84 | VIEW | | 1 | 40 | | 856 (1)| 00:00:11 | | 85 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFF_AAF67829 | 1 | 40 | | 856 (1)| 00:00:11 | | 86 | INDEX RANGE SCAN | AUVBT_BY_PPID1_IX1 | 987 | | | 4 (0)| 00:00:01 | | 87 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 | | 88 | TABLE ACCESS BY INDEX ROWID| ACTIVE_USER_VIEWS_BY_TOPIC | 1 | 35 | | 353 (0)| 00:00:05 | | 89 | TABLE ACCESS FULL | LEARNING_IMPACT_BY_TOPIC | 110K| 2265K| | 794 (1)| 00:00:10 | | 90 | VIEW | | 41 | 1804 | | 771 (1)| 00:00:10 | | 91 | HASH GROUP BY | | 41 | 1886 | | 771 (1)| 00:00:10 | | 92 | HASH JOIN | | 157 | 7222 | | 770 (1)| 00:00:10 | | 93 | TABLE ACCESS BY INDEX ROWID | ACTIVE_USER_VIEWS_BY_TOPIC | 157 | 5338 | | 354 (0)| 00:00:05 | | 94 | INDEX RANGE SCAN | AUVBT_BY_PPID1_IX1 | 987 | | | 5 (0)| 00:00:01 | | 95 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 | | 96 | TABLE ACCESS FULL | ASSESSMENTS | 270K| 3166K| | 415 (1)| 00:00:05 | | 97 | VIEW | | 42 | 756 | | 2 (0)| 00:00:01 | | 98 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE01_AAF67829 | 42 | 756 | | 2 (0)| 00:00:01 | | 99 | VIEW | | 42 | 756 | | 2 (0)| 00:00:01 | | 100 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE01_AAF67829 | 42 | 756 | | 2 (0)| 00:00:01 | | 101 | VIEW | | 42 | 2394 | | 4819 (1)| 00:00:58 | | 102 | HASH JOIN OUTER | | 42 | 6678 | | 4819 (1)| 00:00:58 | | 103 | HASH JOIN OUTER | | 42 | 5376 | | 4816 (1)| 00:00:58 | ... 5
  • 43. © 2016 Pythian 43 EXAMPLE 1 THE EXECUTION PLAN ... | 104 | HASH JOIN OUTER | | 42 | 4074 | | 4813 (1)| 00:00:58 | | 105 | MERGE JOIN OUTER | | 42 | 2394 | | 4698 (1)| 00:00:57 | | 106 | VIEW | VW_FOJ_0 | 42 | 1848 | | 4 (0)| 00:00:01 | | 107 | HASH JOIN FULL OUTER | | 42 | 2604 | | 4 (0)| 00:00:01 | | 108 | VIEW | | 42 | 1302 | | 2 (0)| 00:00:01 | | 109 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE01_AAF67829 | 42 | 756 | | 2 (0)| 00:00:01 | | 110 | VIEW | | 42 | 1302 | | 2 (0)| 00:00:01 | | 111 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE02_AAF67829 | 42 | 756 | | 2 (0)| 00:00:01 | | 112 | BUFFER SORT | | 1 | 13 | | 4698 (1)| 00:00:57 | | 113 | VIEW | | 1 | 13 | | 112 (1)| 00:00:02 | | 114 | VIEW | | 1 | 13 | | 112 (1)| 00:00:02 | | 115 | SORT AGGREGATE | | 1 | 13 | | | | | 116 | VIEW | | 110K| 1402K| | 112 (1)| 00:00:02 | | 117 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE00_AAF67829 | 110K| 2913K| | 112 (1)| 00:00:02 | | 118 | VIEW | | 1 | 40 | | 115 (4)| 00:00:02 | | 119 | WINDOW BUFFER | | 1 | 40 | | 115 (4)| 00:00:02 | | 120 | HASH GROUP BY | | 1 | 40 | | 115 (4)| 00:00:02 | | 121 | VIEW | | 110K| 4315K| | 112 (1)| 00:00:02 | | 122 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE00_AAF67829 | 110K| 2913K| | 112 (1)| 00:00:02 | | 123 | VIEW | | 30 | 930 | | 3 (34)| 00:00:01 | | 124 | WINDOW BUFFER | | 30 | 930 | | 3 (34)| 00:00:01 | | 125 | HASH GROUP BY | | 30 | 930 | | 3 (34)| 00:00:01 | ... 6
  • 44. © 2016 Pythian 44 EXAMPLE 1 THE EXECUTION PLAN ... | 126 | VIEW | | 42 | 1302 | | 2 (0)| 00:00:01 | | 127 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE01_AAF67829 | 42 | 756 | | 2 (0)| 00:00:01 | | 128 | VIEW | | 30 | 930 | | 3 (34)| 00:00:01 | | 129 | WINDOW BUFFER | | 30 | 930 | | 3 (34)| 00:00:01 | | 130 | HASH GROUP BY | | 30 | 930 | | 3 (34)| 00:00:01 | | 131 | VIEW | | 42 | 1302 | | 2 (0)| 00:00:01 | | 132 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE02_AAF67829 | 42 | 756 | | 2 (0)| 00:00:01 | | 133 | VIEW | | 42 | 1302 | | 523 (2)| 00:00:07 | | 134 | HASH GROUP BY | | 42 | 756 | | 523 (2)| 00:00:07 | | 135 | VIEW | | 179K| 3159K| | 518 (1)| 00:00:07 | | 136 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFD_AAF67829 | 179K| 4388K| | 518 (1)| 00:00:07 | | 137 | VIEW | | 42 | 1302 | | 322 (2)| 00:00:04 | | 138 | HASH GROUP BY | | 42 | 756 | | 322 (2)| 00:00:04 | | 139 | VIEW | | 110K| 1942K| | 319 (1)| 00:00:04 | | 140 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFE_AAF67829 | 110K| 2697K| | 319 (1)| 00:00:04 | | 141 | VIEW | | 110K| 4315K| | 112 (1)| 00:00:02 | | 142 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBE00_AAF67829 | 110K| 2913K| | 112 (1)| 00:00:02 | | 143 | BUFFER SORT | | 1 | 13 | | 20379 (1)| 00:04:05 | | 144 | VIEW | | 1 | 13 | | 856 (1)| 00:00:11 | | 145 | VIEW | | 1 | 13 | | 856 (1)| 00:00:11 | | 146 | SORT AGGREGATE | | 1 | | | | | | 147 | VIEW | | 110K| | | 856 (1)| 00:00:11 | ... 7
  • 45. © 2016 Pythian 45 ... | 148 | TABLE ACCESS FULL | SYS_TEMP_0FD9DBDFF_AAF67829 | 110K| 4315K| | 856 (1)| 00:00:11 | | 149 | BUFFER SORT | | 1 | | | 27221 (1)| 00:05:27 | | 150 | VIEW | | 1 | | | 770 (1)| 00:00:10 | | 151 | VIEW | | 1 | | | 770 (1)| 00:00:10 | | 152 | SORT AGGREGATE | | 1 | 25 | | | | | 153 | HASH JOIN | | 157 | 3925 | | 770 (1)| 00:00:10 | | 154 | TABLE ACCESS BY INDEX ROWID | ACTIVE_USER_VIEWS_BY_TOPIC | 157 | 2512 | | 354 (0)| 00:00:05 | | 155 | INDEX RANGE SCAN | AUVBT_BY_PPID1_IX1 | 987 | | | 5 (0)| 00:00:01 | | 156 | FAST DUAL | | 1 | | | 2 (0)| 00:00:01 | | 157 | TABLE ACCESS FULL | ASSESSMENTS | 270K| 2374K| | 415 (1)| 00:00:05 | -------------------------------------------------------------------------------------------------------------------------------------- EXAMPLE 1 THE EXECUTION PLAN 8
  • 46. © 2016 Pythian 46 EXAMPLE 1 THE EXECUTION PLAN - #SHTF
  • 47. © 2016 Pythian 47 EXAMPLE 1 THE OPTIONS • What can one do in this case? – Tune the query? – Check / collect fresh statistics? – Flush the shared pool? (hoping it's bind variable peeking) – Run SQL Tuning Advisor? – or... • How did the SQL statement execute in the past?
  • 48. © 2016 Pythian 48 EXAMPLE 1 AWR_SQLID_PERF_TREND_BY_PLAN.SQL select hss.instance_number inst, to_char(trunc(sysdate-&days_history+1)+trunc((cast(hs.begin_interval_time as date)-(trunc(sysdate-&days_history+1)))*24/(&interval_hours))*(&interval_hours)/24,'dd.mm.yyyy hh24:mi:ss') time, plan_hash_value, sum(hss.executions_delta) executions, round(sum(hss.elapsed_time_delta)/1000000,3) elapsed_time_s, round(sum(hss.cpu_time_delta)/1000000,3) cpu_time_s, round(sum(hss.iowait_delta)/1000000,3) iowait_s, round(sum(hss.clwait_delta)/1000000,3) clwait_s, round(sum(hss.apwait_delta)/1000000,3) apwait_s, round(sum(hss.ccwait_delta)/1000000,3) ccwait_s, round(sum(hss.rows_processed_delta),3) rows_processed, round(sum(hss.buffer_gets_delta),3) buffer_gets, round(sum(hss.disk_reads_delta),3) disk_reads, round(sum(hss.direct_writes_delta),3) direct_writes from dba_hist_sqlstat hss, dba_hist_snapshot hs where hss.sql_id='&sql_id' and hss.snap_id=hs.snap_id and hs.begin_interval_time>=trunc(sysdate)-&days_history+1 group by hss.instance_number, trunc(sysdate-&days_history+1)+trunc((cast(hs.begin_interval_time as date)-(trunc(sysdate-&days_history+1)))*24/(&interval_hours))*(&interval_hours)/24, plan_hash_value having sum(hss.executions_delta)>0
  • 49. © 2016 Pythian 49 10:21:28 SQL> @awr_sqlid_perf_trend_by_plan.sql 4db73upm43ck1 5 24 TIME PLAN_HASH_VALUE EXECUTIONS ELAPSED_TIME_S CPU_TIME_S IOWAIT_S BUFFER_GETS DISK_READS ------------------- --------------- ----------- -------------- ------------ ------------ ----------------- ----------------- 02.06.2016 00:00:00 1597670781 291 278.018 254.272 22.717 19787274.000 50740.000 03.06.2016 00:00:00 1597670781 205 204.755 189.479 14.583 14986545.000 71451.000 04.06.2016 00:00:00 1597670781 3 8.275 4.483 3.936 314594.000 15790.000 04.06.2016 00:00:00 4142332636 2 6.149 3.933 2.307 119766.000 47343.000 05.06.2016 00:00:00 82218884 47 11805.808 5766.836 22.799 1247372099.000 173254.000 06.06.2016 00:00:00 82218884 127 7216.393 3751.640 9.431 522088617.000 24677.000 A few columns have been removed from the outputs to improve the readability! EXAMPLE 1 SQL PERFORMANCE LOOKING AT 5 DAYS OF PERFORMANCE DATA AT ONCE!
  • 50. © 2016 Pythian 50 10:21:28 SQL> @awr_sqlid_perf_trend_by_plan.sql 4db73upm43ck1 5 24 TIME PLAN_HASH_VALUE EXECUTIONS ELAPSED_TIME_S CPU_TIME_S IOWAIT_S BUFFER_GETS DISK_READS ------------------- --------------- ----------- -------------- ------------ ------------ ----------------- ----------------- 02.06.2016 00:00:00 1597670781 291 278.018 254.272 22.717 19787274.000 50740.000 03.06.2016 00:00:00 1597670781 205 204.755 189.479 14.583 14986545.000 71451.000 04.06.2016 00:00:00 1597670781 3 8.275 4.483 3.936 314594.000 15790.000 04.06.2016 00:00:00 4142332636 2 6.149 3.933 2.307 119766.000 47343.000 05.06.2016 00:00:00 82218884 47 11805.808 5766.836 22.799 1247372099.000 173254.000 06.06.2016 00:00:00 82218884 127 7216.393 3751.640 9.431 522088617.000 24677.000 A few columns have been removed from the outputs to improve the readability! EXAMPLE 1 SQL PERFORMANCE LOOKING AT 5 DAYS OF PERFORMANCE DATA AT ONCE!
  • 51. © 2016 Pythian 51 EXAMPLE 1 SQL PLAN BASELINE FROM AWR exec DBMS_SQLTUNE.CREATE_SQLSET(sqlset_name => 'CR1064802', description => 'Plan for sql_id 4db73upm43ck1'); DECLARE cur sys_refcursor; BEGIN OPEN cur FOR SELECT VALUE(P) FROM table(dbms_sqltune.select_workload_repository(11434,12880,'sql_id=''4db73upm43ck1'' and plan_hash_value=1597670781' , NULL, NULL, NULL, NULL, NULL, NULL, 'ALL')) P; DBMS_SQLTUNE.LOAD_SQLSET(load_option=>'MERGE',sqlset_name => 'CR1064802', populate_cursor => cur); CLOSE cur; END; VARIABLE cnt NUMBER EXECUTE :cnt := DBMS_SPM.LOAD_PLANS_FROM_SQLSET( sqlset_name => 'CR1064802', basic_filter => 'sql_id=''4db73upm43ck1'''); comment on table cl_report_owner.ACTIVE_USER_VIEWS_BY_TOPIC is '';
  • 52. © 2016 Pythian 52 11:03:11 SQL> @awr_sqlid_perf_trend_by_plan.sql 4db73upm43ck1 2 1 TIME PLAN_HASH_VALUE EXECUTIONS ELAPSED_TIME_S CPU_TIME_S IOWAIT_S BUFFER_GETS DISK_READS ------------------- --------------- ----------- -------------- ------------ ------------ ----------------- ----------------- ... 06.06.2016 00:00:00 82218884 3 4.600 4.019 .608 1425936.000 965.000 06.06.2016 01:00:00 82218884 4 14.374 11.740 2.756 4726784.000 12836.000 06.06.2016 02:00:00 82218884 20 34.437 33.125 .619 7475353.000 264.000 06.06.2016 03:00:00 82218884 3 4.527 4.485 .032 1205412.000 14.000 06.06.2016 04:00:00 82218884 18 13.543 13.366 .132 1346631.000 57.000 06.06.2016 05:00:00 82218884 22 43.248 40.954 2.217 14290668.000 4439.000 06.06.2016 06:00:00 82218884 11 78.463 77.897 .311 45601072.000 79.000 06.06.2016 07:00:00 82218884 2 3.338 2.155 1.237 165446.000 3369.000 06.06.2016 08:00:00 82218884 10 9.241 9.098 .098 900049.000 61.000 06.06.2016 09:00:00 82218884 34 7010.622 3554.801 1.422 444951266.000 2593.000 06.06.2016 10:00:00 82218884 15 10942.980 4653.979 4.637 586951399.000 2078.000 06.06.2016 10:00:00 1597670781 1 7.910 2.047 .323 117577.000 28.000 06.06.2016 11:00:00 1597670781 1 1.028 1.008 .020 117468.000 28.000 A few columns have been removed from the outputs to improve the readability! EXAMPLE 1 SQL PERFORMANCE Yea, but ... ... what if the good plan is not captured in the AWR?
  • 53. © 2016 Pythian 53 -- Create the procedure that will be used to collect the execution plans create or replace procedure PERF.XXSTABILITY_CAPTURE_PLANS is cur sys_refcursor; cursor clist is with raw_sqlids as (select sql_id from v$sqlarea where sql_id in (select sql_id from v$active_session_history where sample_time>=sysdate-1/24 and sql_plan_hash_value>0 and machine like '%-hesvc-app0%') and plan_hash_value>0 and executions>2 union select sql_id from v$sqlarea where sql_id in (select sql_id from v$open_cursor where sid in (select sid from v$session where machine like '%-hesvc-app0%')) and plan_hash_value>0 and executions>2 and parsing_schema_name not in ('ANONYMOUS','APEX_030200','APEX_040000','APEX_SSO','APPQOSSYS', 'CTXSYS','DBSNMP','DIP','EXFSYS','FLOWS_FILES','MDSYS','OLAPSYS','ORACLE_OCM','ORDDATA','ORDPLUGINS','ORDSYS','OUTLN','OWBSYS ','SI_INFORMTN_SCHEMA','SQLTXADMIN','SQLTXPLAIN','SYS','SYSMAN','SYSTEM','TRCANLZR','WMSYS','XDB','XS$NULL')), sqlids as (select distinct ''''||sql_id||'''' sql_id, trunc((rownum-1)/200) rn from raw_sqlids) select listagg(s.sql_id,',') within group (order by s.sql_id) as sql_id_filter from sqlids s group by s.rn; c clist%rowtype; BEGIN for c in clist loop OPEN cur FOR SELECT VALUE(P) FROM table(dbms_sqltune.select_cursor_cache(basic_filter=>'sql_id in('||c.sql_id_filter||')', attribute_list=>'ALL')) P; DBMS_SQLTUNE.LOAD_SQLSET(load_option=>'MERGE',sqlset_name => 'XXSTABILITY_EXECUTION_PLANS', populate_cursor => cur); CLOSE cur; end loop; Commit; END; / EXAMPLE 1 PRESERVING GOOD EXECUTION PLANS
  • 54. © 2016 Pythian 54 -- Create the Scheduler Job which will run on every hour's 47th minute Begin Dbms_scheduler.create_job (job_name => 'COLLECT_XXSTABILITY_PLANS', job_type => 'STORED_PROCEDURE', job_action => 'PERF.XXSTABILITY_CAPTURE_PLANS', start_date => SYSDATE, repeat_interval => 'FREQ=HOURLY; INTERVAL=1; BYMINUTE=47;', enabled => TRUE); End; / -- Loading the baseline from SELECT_SQLSET for a specific sql_id and plan VARIABLE cnt NUMBER EXECUTE :cnt := DBMS_SPM.LOAD_PLANS_FROM_SQLSET( - sqlset_name => 'XXSTABILITY_EXECUTION_PLANS', - basic_filter => 'sql_id=''dtzsc12fbbjk2'' and plan_hash_value=2896891279'); EXAMPLE 1 PRESERVING EXECUTION PLANS
  • 55. © 2016 Pythian 55 EXAMPLE 2 IO performance
  • 56. © 2016 Pythian 56 • Oracle e-Business Suite – R12.2 – 12.1.0.2 • Alert from the client – Starting from September 5th, everything has become a lot more slower. Entering a sales order can take up to 15 minutes instead of usual 15 seconds. • Not enough detail to look at any specific process or query EXAMPLE 2 THE PROBLEM
  • 57. © 2016 Pythian 57 select to_char(time,'DD.MM.YYYY HH24:MI:SS') time, stat_name, sum(delta_value) value_delta from (select hss.snap_id, trunc(sysdate-&days_history+1)+trunc((cast(hs.end_interval_time as date)-(trunc(sysdate-&days_history+1)))*24/(&interval_hours))*(&interval_hours)/24 time, stat_name, value, value-(lag(value,1) over(partition by hs.startup_time, stat_name order by hss.snap_id)) delta_value from dba_hist_sys_time_model hss, dba_hist_snapshot hs where hss.snap_id=hs.snap_id and hss.instance_number=hs.instance_number and hs.end_interval_time>=trunc(sysdate)-&days_history+1 and hss.stat_name like '&stat_name') group by time, stat_name order by to_date(time,'DD.MM.YYYY HH24:MI:SS'), 1; EXAMPLE 2 AWR_SYS_TIME_MODEL_TREND.SQL
  • 58. © 2016 Pythian 58 EXAMPLE 2 CPU OR WAITING? SQL> @awr_sys_time_model_trend.sql "DB CPU" 14 24 TIME STAT_NAME VALUE_DELTA ------------------- ---------------------------------------------------------------- ----------------- 28.08.2016 00:00:00 DB CPU 204502770965 29.08.2016 00:00:00 DB CPU 240124304792 30.08.2016 00:00:00 DB CPU 243171465732 31.08.2016 00:00:00 DB CPU 271839933025 01.09.2016 00:00:00 DB CPU 398156022996 02.09.2016 00:00:00 DB CPU 343376689897 03.09.2016 00:00:00 DB CPU 262729582269 04.09.2016 00:00:00 DB CPU 79584869551 05.09.2016 00:00:00 DB CPU 87671787128 06.09.2016 00:00:00 DB CPU 103383834430 07.09.2016 00:00:00 DB CPU 16642806685 08.09.2016 00:00:00 DB CPU 215983418676 09.09.2016 00:00:00 DB CPU 100324311282 10.09.2016 00:00:00 DB CPU 11631538710 We're spending less time on CPU, so it's likely we're spending more time somewhere else!
  • 59. © 2016 Pythian 59 EXAMPLE 2 SO WHAT ARE WE WAITING ON? (WAIT CLASSES) select * from ( select to_char(time,'DD.MM.YYYY HH24:MI:SS') time, wait_class, sum(delta_time_waited)/1000000 wait_time_s from (select hse.snap_id, trunc(sysdate-&days_history+1)+trunc((cast(hs.end_interval_time as date)-(trunc(sysdate-&days_history+1)))*24/(&interval_hours))*(&interval_hours)/24 time, EVENT_NAME, WAIT_CLASS, TIME_WAITED_MICRO-(lag(TIME_WAITED_MICRO,1) over(partition by hs.STARTUP_TIME, EVENT_NAME order by hse.snap_id)) delta_time_waited from DBA_HIST_SYSTEM_EVENT hse, DBA_HIST_SNAPSHOT hs where hse.snap_id=hs.snap_id and hs.end_interval_time>=trunc(sysdate)-&days_history+1) group by time, event_name, wait_class) pivot ( sum(wait_time_s) for wait_class in ('Administrative','Application','Cluster' ,'Commit','Concurrency','Configuration' ,'Network','Other','Queueing' ,'Scheduler','System I/O','User I/O','Idle') ) order by to_date(time,'DD.MM.YYYY HH24:MI:SS');
  • 60. © 2016 Pythian 60 SQL> @awr_wait_class_hist.sql 14 1 TIME 'Administrative' 'Application' 'Commit' 'Concurrency' 'Other' 'Scheduler' 'System I/O' 'User I/O' 'Idle' ------------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- 28.08.2016 01:00:00 0 29 27 25 35 0 411 9494 1167334 28.08.2016 02:00:00 0 28 12 16 84 0 435 5944 1220988 28.08.2016 03:00:00 0 28 15 1 17 0 72 5955 1102848 28.08.2016 04:00:00 0 27 13 16 17 0 68 4715 1160580 28.08.2016 05:00:00 0 28 23 0 81 0 361 3585 1100722 28.08.2016 06:00:00 0 28 18 0 58 0 264 3281 1162927 28.08.2016 07:00:00 0 29 13 0 19 0 61 1908 1219200 28.08.2016 08:00:00 0 29 14 0 23 0 67 3752 1121374 28.08.2016 09:00:00 0 29 16 0 22 0 68 2042 1102494 28.08.2016 10:00:00 0 28 14 0 20 0 67 2191 1317052 ... 03.09.2016 19:00:00 0 11 16 1 79 0 238 2943 1191940 03.09.2016 20:00:00 0 15 18 2 96 0 205 3640 1284953 03.09.2016 21:00:00 0 13 25 1 102 0 439 3985 1155491 03.09.2016 22:00:00 0 47 7068 965 1147 0 10445 11709 1201118 03.09.2016 23:00:00 0 43 19698 512 2354 0 56763 16627 1119525 04.09.2016 01:00:00 4 500 50406 6114 14543 0 131447 79139 2224995 04.09.2016 04:00:00 55 1067 65711 4350 16350 0 165858 199986 3820512 04.09.2016 05:00:00 0 29 12118 766 2378 0 13428 55055 1160076 04.09.2016 06:00:00 1 32 2510 54 1242 0 7708 47570 1295052 04.09.2016 07:00:00 0 21 546 1 305 0 3139 42468 1299331 04.09.2016 08:00:00 0 18 265 16 200 0 1788 28516 1242703 04.09.2016 09:00:00 0 13 377 1 174 0 1777 13472 1194265 04.09.2016 10:00:00 0 15 447 1 215 0 2371 15196 1242622 04.09.2016 11:00:00 0 13 404 2 205 0 2312 14984 1207877 04.09.2016 12:00:00 0 13 405 1 238 0 2664 16214 1217226 04.09.2016 13:00:00 0 15 597 1 354 0 3093 14902 1232148 04.09.2016 14:00:00 0 17 486 1 224 0 2252 12952 1313141 04.09.2016 15:00:00 0 5 486 1 254 0 2404 13285 1176055 EXAMPLE 2 SO WHAT ARE WE WAITING ON? (WAIT CLASSES)
  • 61. © 2016 Pythian 61 SQL> @awr_wait_class_hist.sql 14 1 TIME 'Administrative' 'Application' 'Commit' 'Concurrency' 'Other' 'Scheduler' 'System I/O' 'User I/O' 'Idle' ------------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- 28.08.2016 01:00:00 0 29 27 25 35 0 411 9494 1167334 28.08.2016 02:00:00 0 28 12 16 84 0 435 5944 1220988 28.08.2016 03:00:00 0 28 15 1 17 0 72 5955 1102848 28.08.2016 04:00:00 0 27 13 16 17 0 68 4715 1160580 28.08.2016 05:00:00 0 28 23 0 81 0 361 3585 1100722 28.08.2016 06:00:00 0 28 18 0 58 0 264 3281 1162927 28.08.2016 07:00:00 0 29 13 0 19 0 61 1908 1219200 28.08.2016 08:00:00 0 29 14 0 23 0 67 3752 1121374 28.08.2016 09:00:00 0 29 16 0 22 0 68 2042 1102494 28.08.2016 10:00:00 0 28 14 0 20 0 67 2191 1317052 ... 03.09.2016 19:00:00 0 11 16 1 79 0 238 2943 1191940 03.09.2016 20:00:00 0 15 18 2 96 0 205 3640 1284953 03.09.2016 21:00:00 0 13 25 1 102 0 439 3985 1155491 03.09.2016 22:00:00 0 47 7068 965 1147 0 10445 11709 1201118 03.09.2016 23:00:00 0 43 19698 512 2354 0 56763 16627 1119525 04.09.2016 01:00:00 4 500 50406 6114 14543 0 131447 79139 2224995 04.09.2016 04:00:00 55 1067 65711 4350 16350 0 165858 199986 3820512 04.09.2016 05:00:00 0 29 12118 766 2378 0 13428 55055 1160076 04.09.2016 06:00:00 1 32 2510 54 1242 0 7708 47570 1295052 04.09.2016 07:00:00 0 21 546 1 305 0 3139 42468 1299331 04.09.2016 08:00:00 0 18 265 16 200 0 1788 28516 1242703 04.09.2016 09:00:00 0 13 377 1 174 0 1777 13472 1194265 04.09.2016 10:00:00 0 15 447 1 215 0 2371 15196 1242622 04.09.2016 11:00:00 0 13 404 2 205 0 2312 14984 1207877 04.09.2016 12:00:00 0 13 405 1 238 0 2664 16214 1217226 04.09.2016 13:00:00 0 15 597 1 354 0 3093 14902 1232148 04.09.2016 14:00:00 0 17 486 1 224 0 2252 12952 1313141 04.09.2016 15:00:00 0 5 486 1 254 0 2404 13285 1176055 EXAMPLE 2 SO WHAT ARE WE WAITING ON? (WAIT CLASSES)
  • 62. © 2016 Pythian 62 EXAMPLE 2 SO WHAT ARE WE WAITING ON? (WAIT CLASSES)
  • 63. © 2016 Pythian 63 • What could it be? – We're doing way more IOs – The IOs are much slower – … or both EXAMPLE 2 “USER I/O” IS MISBEHAVING
  • 64. © 2016 Pythian 64 EXAMPLE 2 AWR_WAIT_CLASS_EVENTS_TREND.SQL - WHAT HAPPENED TO THE USER I/O? select to_char(time,'DD.MM.YYYY HH24:MI:SS') time, event_name, sum(delta_total_waits) total_waits, round(sum(delta_time_waited/1000000),3) total_time_s, round(sum(delta_time_waited)/decode(sum(delta_total_waits),0,null,sum(delta_total_waits))/1000,3) avg_time_ms from (select hse.snap_id, trunc(sysdate-&days_history+1)+trunc((cast(hs.begin_interval_time as date)-(trunc(sysdate-&days_history+1)))*24/(&interval_hours))*(&interval_hours)/24 time, EVENT_NAME, WAIT_CLASS, TOTAL_WAITS-(lag(TOTAL_WAITS,1) over(partition by hs.STARTUP_TIME, EVENT_NAME order by hse.snap_id)) delta_total_waits, TIME_WAITED_MICRO-(lag(TIME_WAITED_MICRO,1) over(partition by hs.STARTUP_TIME, EVENT_NAME order by hse.snap_id)) delta_time_waited from DBA_HIST_SYSTEM_EVENT hse, DBA_HIST_SNAPSHOT hs where hse.snap_id=hs.snap_id and hs.begin_interval_time>=trunc(sysdate)-&days_history+1 and hse.WAIT_CLASS like '&wait_class') group by time, event_name order by 2, to_date(time,'DD.MM.YYYY HH24:MI:SS');
  • 65. © 2016 Pythian 65 SQL> @awr_wait_class_events_trend.sql "User I/O" 14 24 TIME EVENT_NAME TOTAL_WAITS TOTAL_TIME_S AVG_TIME_MS ------------------- ---------------------------------------------------------------- --------------- -------------- -------------- ... 28.08.2016 00:00:00 db file scattered read 110851 2332.624 21.043 29.08.2016 00:00:00 db file scattered read 553580 7823.429 14.132 30.08.2016 00:00:00 db file scattered read 710412 8074.224 11.366 31.08.2016 00:00:00 db file scattered read 686109 8779.227 12.796 01.09.2016 00:00:00 db file scattered read 3697362 79473.993 21.495 02.09.2016 00:00:00 db file scattered read 905800 12899.301 14.241 03.09.2016 00:00:00 db file scattered read 181632 5821.909 32.053 04.09.2016 00:00:00 db file scattered read 142537 44193.256 310.048 05.09.2016 00:00:00 db file scattered read 326866 32658.860 99.915 06.09.2016 00:00:00 db file scattered read 258082 29108.440 112.788 07.09.2016 00:00:00 db file scattered read 534720 44248.693 82.751 08.09.2016 00:00:00 db file scattered read 158424 22083.148 139.393 09.09.2016 00:00:00 db file scattered read 313153 47113.132 150.448 10.09.2016 00:00:00 db file scattered read 145106 14431.633 99.456 ... EXAMPLE 2 AWR_WAIT_CLASS_EVENTS_TREND.SQL - WHAT HAPPENED TO THE USER I/O?
  • 66. © 2016 Pythian 66 SQL> @awr_wait_class_events_trend.sql "User I/O" 14 24 TIME EVENT_NAME TOTAL_WAITS TOTAL_TIME_S AVG_TIME_MS ------------------- ---------------------------------------------------------------- --------------- -------------- -------------- ... 28.08.2016 00:00:00 db file sequential read 15851686 24652.524 1.555 29.08.2016 00:00:00 db file sequential read 12892354 41750.047 3.238 30.08.2016 00:00:00 db file sequential read 37228593 89856.611 2.414 31.08.2016 00:00:00 db file sequential read 23431904 71298.237 3.043 01.09.2016 00:00:00 db file sequential read 26866886 82063.899 3.054 02.09.2016 00:00:00 db file sequential read 20273240 60593.329 2.989 03.09.2016 00:00:00 db file sequential read 5114798 28039.911 5.482 04.09.2016 00:00:00 db file sequential read 7142647 401434.020 56.202 05.09.2016 00:00:00 db file sequential read 8949913 292546.728 32.687 06.09.2016 00:00:00 db file sequential read 19490699 665357.848 34.137 07.09.2016 00:00:00 db file sequential read 16387403 541792.005 33.061 08.09.2016 00:00:00 db file sequential read 6989352 241881.608 34.607 09.09.2016 00:00:00 db file sequential read 12549290 453219.850 36.115 10.09.2016 00:00:00 db file sequential read 4823556 119185.469 24.709 ... EXAMPLE 2 AWR_WAIT_CLASS_EVENTS_TREND.SQL - WHAT HAPPENED TO THE USER I/O?
  • 67. © 2016 Pythian 67 EXAMPLE 2 AWR_WAIT_CLASS_EVENTS_TREND.SQL - WHAT HAPPENED TO THE USER I/O?
  • 68. © 2016 Pythian 68 EXAMPLE 2 AWR_WAIT_CLASS_EVENTS_TREND.SQL - WHAT HAPPENED TO THE USER I/O?
  • 69. © 2016 Pythian 69 The Issue was passed on to the storage team. They found 2 faulty drives. EXAMPLE 2 THE ROOT CAUSE
  • 70. © 2016 Pythian 70 EXAMPLE 3 Redo size
  • 71. © 2016 Pythian 71 • Oracle e-Business Suite – R12.1 – 12.1.0.2 • Alert from the monitoring – We're running out of space on the mount point that's used as a long term storage for archived logs (10 days) EXAMPLE 3 THE PROBLEM
  • 72. © 2016 Pythian 72 select to_char(time,'DD.MM.YYYY HH24:MI:SS') time, stat_name, sum(delta_value) value_delta from (select hss.snap_id, trunc(sysdate-&days_history+1)+trunc((cast(hs.end_interval_time as date)-(trunc(sysdate-&days_history+1)))*24/(&interval_hours))*(&interval_hours)/24 time, stat_name, value, value-(lag(value,1) over(partition by hs.startup_time, stat_name order by hss.snap_id)) delta_value from dba_hist_sysstat hss, dba_hist_snapshot hs where hss.snap_id=hs.snap_id and hss.instance_number=hs.instance_number and hs.begin_interval_time>=trunc(sysdate)-&days_history+1 and hss.stat_name like ' ') group by time, stat_name order by 2, to_date(time,'DD.MM.YYYY HH24:MI:SS'); EXAMPLE 3 AWR_STAT_TREND.SQL
  • 73. © 2016 Pythian 73 SQL> @awr_stat_trend "redo size" 30 4 TIME STAT_NAME VALUE_DELTA ------------------- ---------------- ----------------- ... 22.10.2016 20:00:00 redo size 29672405900 23.10.2016 00:00:00 redo size 45868325988 23.10.2016 04:00:00 redo size 28625802412 23.10.2016 08:00:00 redo size 46741701432 23.10.2016 12:00:00 redo size 48761724412 23.10.2016 16:00:00 redo size 46302390088 23.10.2016 20:00:00 redo size 29891530168 24.10.2016 00:00:00 redo size 39012726684 24.10.2016 04:00:00 redo size 33850511384 24.10.2016 08:00:00 redo size 27530642800 24.10.2016 12:00:00 redo size 103480430448 24.10.2016 16:00:00 redo size 124196709984 24.10.2016 20:00:00 redo size 30110908608 25.10.2016 00:00:00 redo size 38282203780 25.10.2016 04:00:00 redo size 34092919668 EXAMPLE 3 WHEN DO DID WE GENERATE MORE REDO?
  • 74. © 2016 Pythian 74 EXAMPLE 3 WHEN DO DID WE GENERATE MORE REDO?
  • 75. © 2016 Pythian 75 EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385764.arc'); EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385765.arc'); EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385766.arc'); EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385767.arc'); EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385768.arc'); EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385769.arc'); EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385770.arc'); EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385771.arc'); EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385772.arc'); EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385773.arc'); EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385774.arc'); EXEC DBMS_LOGMNR.ADD_LOGFILE('/arch_ret/prod/prod1_719619092_385775.arc'); EXEC DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG); EXAMPLE 3 WHAT CAUSED THE EXCESSIVE REDO?
  • 76. © 2016 Pythian 76 set pages 50000 lines 500 tab off time on serverout on col owner for a30 col object_name for a30 col subobject_name for a30 col object_type for a30 select data_obj#, owner, object_name, subobject_name, count(*) REDO_CNT, sum(R_SIZE_B)/1024/1024 REDO_MB from ( select data_obj#, THREAD#, SEQUENCE#, RBABLK, RBABYTE, RBABLK*512+RBABYTE b_offset, (lead(RBABLK*512+RBABYTE) over (partition by RBASQN order by RBABLK*512+RBABYTE))-(RBABLK*512+RBABYTE) R_SIZE_B from V$LOGMNR_CONTENTS) lc, dba_objects o where o.data_object_id(+)=lc.data_obj# group by data_obj#, owner, object_name, subobject_name order by 6; EXAMPLE 3 WHAT CAUSED THE EXCESSIVE REDO?
  • 77. © 2016 Pythian 77 DATA_OBJ# OWNER OBJECT_NAME SUBOBJECT_NAME REDO_CNT REDO_MB ---------- ----------- ------------------------------ ----------------- ---------- ---------- ... 4214022 AR SYS_LOB0004214021C00002$$ 16997 55.844368 4214007 AR SYS_LOB0004214006C00002$$ 11991 60.0471535 160758 APPLSYS MO_GLOB_ORG_ACCESS_TMP_U1 431892 80.7151947 112443 784710 142.132919 0 CTXSYS DR$DBO 859097 253.653015 137676 3774665 565.485004 181691 APPS XX_OM_PRICING_DETAILS_GTT_N100 3840811 709.441868 1026278 APPS XX_OM_PRICING_DETAILS_GTT_NS 3870531 772.384396 181690 APPS XX_OM_PRICING_DETAILS_GTT_N400 3886342 817.994175 181692 APPS XX_OM_PRICING_DETAILS_GTT_N200 3943281 882.903255 880271 APPS XX_OM_PRICING_DETAIL_GTT_N20 4118952 1245.52386 181689 APPS XX_OM_PRICING_DETAILS_GTT_N300 4238632 1464.44829 307 rows selected. EXEC DBMS_LOGMNR.END_LOGMNR; EXAMPLE 3 WHAT CAUSED THE EXCESSIVE REDO?
  • 78. © 2016 Pythian 78 One of the concurrent programs inserting into the GTT was executed more often during the time of the issue A) Added +append and set alter session set temp_undo_enabled=true B) The frequency of the concurrent program was reduced C) 4 of 6 indexes on the GTT were dropped EXAMPLE 3 THE ROOT CAUSE Thanks, @davidmkurtz
  • 79. © 2016 Pythian 79 Redo Size (M) EXAMPLE 3 THE ROOT CAUSE Conventional load Direct path load (+append) Temporary Undo = False 674 200 Temporary Undo = True 13 8
  • 80. © 2016 Pythian 80 SUMMARY
  • 81. © 2016 Pythian 81 • AWR reports are not good in displaying how performance changes over time. • Many performance metrics stored in AWR can be: – Put on a timeline to see how they change over time – Useful for Troubleshooting – Useful for Prediction • Remember, you're still working with aggregated data SUMMARY
  • 82. © 2016 Pythian 82 SUMMARY Photo by Kate Ter Haar / CC BY 2.0
  • 83. © 2016 Pythian 83 AWR is a complex beast, but it’s not necessary to know much to start mining Be Brave! But buy Diagnostics pack licenses first.
  • 84. © 2016 Pythian 84 THANK YOU @MarisDBA Elsins@pythian.com