Open Source or free tuning tools for Oracle databases

58
hitchhikers guide to free Oracle tuning tools a quick guide Björn Rost

Transcript of Open Source or free tuning tools for Oracle databases

Page 1: Open Source or free tuning tools for Oracle databases

hitchhikers guide to free Oracle tuning toolsa quick guide

Björn Rost

Page 2: Open Source or free tuning tools for Oracle databases

© 2015 Pythian Confidential2

Page 3: Open Source or free tuning tools for Oracle databases

© 2016 Pythian3

• Consultant– Oracle Database HA, Tuning, etc– Linux&Solaris automation

• Oracle ACE Director• (ex) president RAC SIG• organizer OTN EMEA tour

ABOUT ME

Page 4: Open Source or free tuning tools for Oracle databases

ABOUT PYTHIANPythian’s 400+ IT professionals help companies adopt and manage disruptive technologies to better compete

© 2016 Pythian. Confidential 4

Page 5: Open Source or free tuning tools for Oracle databases

© 2016 Pythian. Confidential 5

Systems currently managed by Pythian

EXPERIENCED

Pythian experts in 35 countries

GLOBAL

Millennia of experience gathered and shared

over 19 years

EXPERTS

11,800 2 400

Page 6: Open Source or free tuning tools for Oracle databases

© 2016 Pythian. Confidential 6

TECHNICAL EXPERTISE

CLOUD

ADVANCEDANALYTICS

DATABASES

BIG DATA

DEVOPS

Using the disruptive nature of cloud for accelerated, cost-effective growth

INFRASTRUCTUREMANAGEMENT

Mining data for insights & business transformation using data science

Ensuring databases are reliable, secure, available and continuously optimized

Harnessing the transformative power of data on a massive scale

Providing critical velocity in software deployment by adopting DevOps practices

Transforming and managing the IT infrastructure that supports the business

Page 7: Open Source or free tuning tools for Oracle databases

7

WHY ORACLE?• basic operations same

between DBs• instrumentation makes the

difference• allows to deeply investigate

and explain issues

© 2016 Pythian

Page 8: Open Source or free tuning tools for Oracle databases

© 2016 Pythian8

(WRONG) TUNING CYCLE

guess

change

hope

Page 9: Open Source or free tuning tools for Oracle databases

© 2016 Pythian9

DON’T BE A STORMTROOPER DBA

Page 10: Open Source or free tuning tools for Oracle databases

© 2016 Pythian10

TUNING CYCLE

understand

change

measure

Page 11: Open Source or free tuning tools for Oracle databases

11

TUNING IS SIMPLE, REALLY

© 2016 Pythian

Page 12: Open Source or free tuning tools for Oracle databases

12

LAST WEEK’S EXAMPLE• increasing gap in standby db

– change max_archive_processes parameter– change some other parameters– try rman recovery vs MRP– increase parallelism– reduce parallelism– try more silver bullets…– have SRE look into IO issues– have SRE look at CPU issues

© 2016 Pythian

guess

change

hope

Page 13: Open Source or free tuning tools for Oracle databases

13

LAST WEEK’S EXAMPLE• select event from v$sessionwhere program like '%MRP%’– PX deq credit: send blkd– PX deq credit: need buffer

• search for that on MOS– 10.2 Parallel Standby Recovery Process Is Very Slow (Doc ID 420337.1)

• PARALLEL_EXECUTION_MESSAGE_SIZE=16k

© 2016 Pythian

understand

change

measure

Page 14: Open Source or free tuning tools for Oracle databases

14

TYPES

report real-time historic drill-down

© 2016 Pythian

Page 15: Open Source or free tuning tools for Oracle databases

16

ENTERPRISE MANAGER • incredibly useful and thought through• from vendor, perfectly integrated• many common views and methods

– coloured AAS view– Top-SQL view– Real-Time SQL monitor– blocking session tree– AWR Reports– ADDM and other advisors

© 2016 Pythian

Page 16: Open Source or free tuning tools for Oracle databases

© 2015 Pythian Confidential17

ENTERPRISE MANAGER

Page 17: Open Source or free tuning tools for Oracle databases

18

SO WHY USE CLI TOOLS?• not licensed for Diag&Tuning

– Standard Edition– EE without Diag&Tuning (a cardinal sin)

• very low throughput or no GUI access• EM not setup/installed

– 12c EM express can get the job done• you simply want to look like a nerd

© 2016 Pythian

Page 18: Open Source or free tuning tools for Oracle databases

19

WHY OPEN SOURCE• see and learn

– you can actually look at the code you are running• collaborate and contribute

– want a new feature? implement yourself!• free(*) means

– no costs (duh)– get up and running really fast– don’t worry about audits

© 2016 Pythian

Page 19: Open Source or free tuning tools for Oracle databases

© 2015 Pythian Confidential20

Page 20: Open Source or free tuning tools for Oracle databases

21

RLSQLPLUS• sqlplus on steroids• edit sqlplus CLI• history

– up/down arrow– search with CTRL-r

• auto-completion– against custom wordlist

© 2016 Pythian

Page 21: Open Source or free tuning tools for Oracle databases

22

RLSQLPLUS INSTALLATION STEP1[root@kickpuppet ~]# yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/rlwrap-0.42-1.el6.x86_64.rpm

================================================================================ Package Arch Version Repository Size================================================================================Installing: rlwrap x86_64 0.41-1.el6 epel 92 k

Transaction Summary================================================================================Install 1 Package(s)

Installing : rlwrap-0.41-1.el6.x86_64 1/1 Verifying : rlwrap-0.41-1.el6.x86_64 1/1

Installed: rlwrap.x86_64 0:0.41-1.el6

Complete!

© 2016 Pythian

Page 22: Open Source or free tuning tools for Oracle databases

23

RLSQLPLUS INSTALLATION STEP2• optional: download or generate wordfile

– for autocompletion

$ curl -o wordfile.txt http://blog.tanelpoder.com/files/scripts/setup/wordfile_11gR2.txt

http://blog.tanelpoder.com/files/scripts/setup/

© 2016 Pythian

Page 23: Open Source or free tuning tools for Oracle databases

24

RLSQLPLUS INSTALLATION STEP 3• create aliases around sqlplus

– and rman– and dgmgrl

• avoid overriding the original name

alias rlsqlplus='rlwrap -D2 -irc -b'\''"@(){}[],+=&^%#;|\'\'' -f ~/wordfile.txt sqlplus'alias rlrman='rlwrap -D2 -irc -b'\''"@(){}[],+=&^%#;|\'\'' rman'

© 2016 Pythian

Page 24: Open Source or free tuning tools for Oracle databases

25

SQLCL• sqlplus “replacement” from SQLdeveloper team

– history and editor– auto-completion– auto-formatting

• ansiconsole for col widths• json, xml, csv etc

– tons of good stuff

© 2016 Pythian

Page 25: Open Source or free tuning tools for Oracle databases

© 2015 Pythian Confidential26

Page 26: Open Source or free tuning tools for Oracle databases

27

AAS VIEW• my favourite real-time DB dashboard• one-glance DB activity overview• colour-coded

– red -> blocking, app, concurrency– blue -> IO, missing indexes, etc– green -> CPU, executing too much?– other -> weird, take a look

© 2016 Pythian

Page 27: Open Source or free tuning tools for Oracle databases

28

AAS VIEW

© 2016 Pythian

Page 28: Open Source or free tuning tools for Oracle databases

29

WEB-ASH• simple and free• reads v$session by default• stores data in plain files• lean javascript to display

http://datavirtualizer.com/web-ash-w-ash/

© 2016 Pythian

Page 29: Open Source or free tuning tools for Oracle databases

30

MOATS• top-like output that refreshes• excellent overview• needs small installation on database• samples v$-views while running• improved forks

– MOATS 2.0– SQL Dashboard

© 2016 Pythian

Page 30: Open Source or free tuning tools for Oracle databases

31

MOATS OUTPUTMOATS: The Mother Of All Tuning Scripts v1.0 by Adrian Billington & Tanel Poder http://www.oracle-developer.net & http://www.e2sn.com+ INSTANCE SUMMARY ------------------------------------------------------------------------------------------+| Instance: KICKPUPPET | Execs/s: 581.6 | sParse/s: 60.0 | LIOs/s: 4989.5 | Read MB/s: 0.7 || Cur Time: 19-Nov 21:11:09 | Calls/s: 164.2 | hParse/s: 0.0 | PhyRD/s: 86.7 | Write MB/s: 1.6 || History: 0h 9m 45s | Commits/s: 50.3 | ccHits/s: 578.8 | PhyWR/s: 112.7 | Redo MB/s: 0.2 |+------------------------------------------------------------------------------------------------------------+

+ TOP SQL_ID (child#) -----+ TOP SESSIONS ---------+ + TOP WAITS -------------------------+ WAIT CLASS -+| 29% | 7t0959msvyt5g (0) | 78,65 | | 29% | db file sequential read | User I/O || 14% | () | | | 29% | ON CPU | ON CPU || 14% | 147a57cxq3w5y (0) | 70 | | 14% | oracle thread bootstrap | Other || 14% | gh2g2tynpcpv1 (0) | 65 | | 14% | resmgr:cpu quantum | Scheduler || 14% | 4phvdvx32a3mf (0) | 73 | | 14% | db file parallel read | User I/O |+--------------------------------------------------+ +--------------------------------------------------+

+ TOP SQL_ID ----+ PLAN_HASH_VALUE + SQL TEXT ---------------------------------------------------------------+| 7t0959msvyt5g | 856749079 | SELECT ORDER_ID, ORDER_DATE, ORDER_MODE, CUSTOMER_ID, ORDER_STATUS, ORD || | | ER_TOTAL, SALES_REP_ID, PROMOTION_ID, WAREHOUSE_ID, DELIVERY_TYPE, COST |+ ---------------------------------------------------------------------------------------------------------- +| 147a57cxq3w5y | 0 | BEGIN :1 := orderentry.browseproducts(:2 ,:3 ,:4 ); END; |+ ---------------------------------------------------------------------------------------------------------- +| gh2g2tynpcpv1 | 0 | INSERT INTO CUSTOMERS ( CUSTOMER_ID , CUST_FIRST_NAME , CUST_LAST_NAME || | | , NLS_LANGUAGE , NLS_TERRITORY , CREDIT_LIMIT , CUST_EMAIL , ACCOUNT_MG |+ ---------------------------------------------------------------------------------------------------------- +| 4phvdvx32a3mf | 0 | begin prvt_ilm.stopjobs(-1,true,true,:1); end; |+ ---------------------------------------------------------------------------------------------------------- +

© 2016 Pythian

Page 31: Open Source or free tuning tools for Oracle databases

32

MOATS 2.0 OUTPUT

© 2016 Pythian

Page 32: Open Source or free tuning tools for Oracle databases

33

SNAPPER• realtime session monitor and drill-downs• just one sqlscript to run

– no installation needed• runs for sample period

– “snaps” v$session etc– reports on diffs

• two modes– “ash” for v$session– stats for v$sesstat http://tech.e2sn.com/oracle-scripts-and-tools/session-snapper

© 2016 Pythian

Page 33: Open Source or free tuning tools for Oracle databases

34

SNAPPER ARGUMENTS• snapper ash 5 1 all

– mode can be ash, stat or custom column list– seconds to run/sample– number of runs– “all” or filter on v$session columns

• sid=42• username=brost

© 2016 Pythian

Page 34: Open Source or free tuning tools for Oracle databases

35

SNAPPER DEFAULT MODESQL> @snapper ash 5 1 allSampling SID all with interval 5 seconds, taking 1 snapshots... -- Session Snapper v4.15 - by Tanel Poder ( http://blog.tanelpoder.com ) -- Enjoy the Most Advanced Oracle Troubleshooting Script on the Planet! :) ----------------------------------------------------------------------------------------------------Active% | INST | SQL_ID | SQL_CHILD | EVENT | WAIT_CLASS ---------------------------------------------------------------------------------------------------- 10% | 1 | | 0 | db file async I/O submit | System I/O 10% | 1 | | | log file sync | Commit 7% | 1 | 5ckxyqfvu60pj | 0 | db file sequential read | User I/O 7% | 1 | | 0 | log file parallel write | System I/O 5% | 1 | | | ON CPU | ON CPU 5% | 1 | 3fw75k1snsddx | 0 | db file sequential read | User I/O 5% | 1 | | 0 | ON CPU | ON CPU 5% | 1 | c13sma6rkr27c | 0 | db file parallel read | User I/O 5% | 1 | gzhkw1qu6fwxm | 0 | ON CPU | ON CPU 5% | 1 | 0w2qpuc6u2zsp | 0 | ON CPU | ON CPU -- End of ASH snap 1, end=2016-04-24 15:24:37, seconds=5, samples_taken=42

© 2016 Pythian

Page 35: Open Source or free tuning tools for Oracle databases

36

AAS IN SNAPPERSQL> @snapper ash=wait_class 5 1 allSampling SID all with interval 5 seconds, taking 1 snapshots...

-- Session Snapper v4.11 - by Tanel Poder ( http://blog.tanelpoder.com ) -- Enjoy the Most Advanced Oracle Troubleshooting Script on the Planet!

-------------------------Active% | WAIT_CLASS------------------------- 44% | System I/O 19% | Commit 7% | Scheduler 7% | ON CPU 5% | User I/O

-- End of ASH snap 1, end=2014-11-19 16:23:06, seconds=5, samples_taken=43

© 2016 Pythian

Page 36: Open Source or free tuning tools for Oracle databases

37

SNAPPER STATS MODESQL> @snapper stats,gather=tw 15 1 sid=70Sampling SID sid=70 with interval 15 seconds, taking 1 snapshots...

-- Session Snapper v4.11 BETA - by Tanel Poder ( http://blog.tanelpoder.com ) - Enjoy the Most Advanced Oracle Troubleshooting Script on the Planet! :)

--------------------------------------------------------------------------------------------------------------------------------------------------- SID, USERNAME , TYPE, STATISTIC , DELTA, HDELTA/SEC, %TIME, GRAPH , NUM_WAITS, WAITS/SEC, AVERAGES--------------------------------------------------------------------------------------------------------------------------------------------------- 70, SOE , TIME, repeated bind elapsed time , 300, 19.8us, .0%, [ ], , , 70, SOE , TIME, parse time elapsed , 9272, 611.99us, .1%, [ ], , , 70, SOE , TIME, PL/SQL execution elapsed time, 230999, 15.25ms, 1.5%, [# ], , , 70, SOE , TIME, DB CPU , 569000, 37.56ms, 3.8%, [@ ], , , 70, SOE , TIME, sql execute elapsed time , 1730975, 114.25ms, 11.4%, [## ], , , 70, SOE , TIME, DB time , 2038543, 134.55ms, 13.5%, [## ], , , .88 % unaccounted 70, SOE , WAIT, log file sync , 235408, 15.54ms, 1.6%, [W ], 183, 12.08, 1.29ms average 70, SOE , WAIT, db file sequential read , 1123224, 74.14ms, 7.4%, [W ], 397, 26.2, 2.83ms average 70, SOE , WAIT, db file parallel read , 52763, 3.48ms, .3%, [ ], 3, .2, 17.59ms average 70, SOE , WAIT, latch: In memory undo latch , 499, 32.94us, .0%, [ ], 1, .07, 499us average 70, SOE , WAIT, resmgr:cpu quantum , 51794, 3.42ms, .3%, [ ], 3, .2, 17.26ms average 70, SOE , WAIT, SQL*Net message to client , 1458, 96.23us, .0%, [ ], 393, 25.94, 3.71us average 70, SOE , WAIT, SQL*Net message from client , 60177, 3.97ms, .4%, [ ], 393, 25.94, 153.12us average 70, SOE , WAIT, PL/SQL lock timer , 12918348, 852.66ms, 85.3%, [WWWWWWWWW ], 1328, 87.65, 9.73ms average 70, SOE , WAIT, events in waitclass Other , 960, 63.36us, .0%, [ ], 2, .13, 480us average

-- End of Stats snap 1, end=2014-11-20 08:04:39, seconds=15.2

© 2016 Pythian

Page 37: Open Source or free tuning tools for Oracle databases

38

TOP SQLSQL> @snapper ash=sql_id+wait_class 15 1 user=soeSampling SID user=soe with interval 15 seconds, taking 1 snapshots...

-- Session Snapper v4.11 BETA - by Tanel Poder ( http://blog.tanelpoder.com )-- Enjoy the Most Advanced Oracle Troubleshooting Script on the Planet! :)

-------------------------------------------Active% | SQL_ID | WAIT_CLASS------------------------------------------- 14% | | Commit 5% | 7hk2m2702ua0g | User I/O 4% | 5ckxyqfvu60pj | User I/O 3% | 7t0959msvyt5g | User I/O 3% | gh2g2tynpcpv1 | User I/O 2% | 0w2qpuc6u2zsp | Scheduler 2% | g81cbrq5yamf5 | User I/O 2% | 7ws837zynp1zv | User I/O 2% | f7rxuxzt64k87 | User I/O 2% | 1qf3b7a46jm3u | User I/O

-- End of ASH snap 1, end=2014-11-20 06:14:42, seconds=15, samples_taken=100

© 2016 Pythian

Page 38: Open Source or free tuning tools for Oracle databases

39

SQLDEVELOPER

© 2016 Pythian

Page 39: Open Source or free tuning tools for Oracle databases

40

SQLDEVELOPER

© 2016 Pythian

Page 40: Open Source or free tuning tools for Oracle databases

41

HISTORIC PERFORMANCE• moats, snapper etc only sample when running• EE (+diag/tuning) has ASH and AWR

© 2016 Pythian

Page 41: Open Source or free tuning tools for Oracle databases

42

AWR REPORTS -> STATSPACK• good for a high-level overview• AWR has a bit more “stuff” than statspack• AWR is setup automatically (60min snaps)

– be mindful of averages• but AWR needs EE and diag&tuning pack

© 2016 Pythian

Page 42: Open Source or free tuning tools for Oracle databases

43

STATSPACK IN 12C• no problem in non-CDB• with multitenant would make most sense in CDB

– but not really supported due to common user c#...• there is a nasty and unsupported workaround

https://jonathanlewis.wordpress.com/2013/07/04/12c-statspack-hack/

© 2016 Pythian

Page 43: Open Source or free tuning tools for Oracle databases

44

ORASASH• does pretty much what ASH does (but for free)• sample and store information from v$-views• mostly compatible with EE ASH

– ashmon– ashmasters etc

• stores data from multiple sources in repo db– minimal footprint in source, only view and dblink

http://pioro.github.io/orasash/

© 2016 Pythian

Page 44: Open Source or free tuning tools for Oracle databases

45

SQLT• oracle supported scripts• needs a schema an installation in db

– (this is annoying)• will gather *everything* about a single SQL

– option to use diag&tuning• output is one zipped html archive

Metalink Doc id 215187.1

© 2016 Pythian

Page 45: Open Source or free tuning tools for Oracle databases

46

SQLD360• sql scope (just like SQLT)• needs no installation• one zipfile including html output

http://mauro-pagano.com/2015/02/16/sqld360-sql-diagnostics-collection-made-faster/

© 2016 Pythian

Page 46: Open Source or free tuning tools for Oracle databases

47

SQLD SCREENSHOTS

© 2016 Pythian

Page 47: Open Source or free tuning tools for Oracle databases

48

SQLD SCREENSHOTS

© 2016 Pythian

Page 48: Open Source or free tuning tools for Oracle databases

49

SQLD INCLUDES SQLSELECT MIN(a.snap_id) snap_id, TO_CHAR(a.begin_interval_time, 'YYYY-MM-DD HH24:MI') begin_time, TO_CHAR(a.end_interval_time, 'YYYY-MM-DD HH24:MI') end_time, NVL(TRUNC(SUM(b.elapsed_time_total/NVL(NULLIF(executions_total,0),1)/1e6),3),0) elapsed_time, NVL(TRUNC(SUM(b.cpu_time_total/NVL(NULLIF(executions_total,0),1)/1e6),3),0) cpu_time, NVL(TRUNC(SUM(b.iowait_total/NVL(NULLIF(executions_total,0),1)/1e6),3),0) iowait, NVL(TRUNC(SUM(b.clwait_total/NVL(NULLIF(executions_total,0),1)/1e6),3),0) clwait, NVL(TRUNC(SUM(b.apwait_total/NVL(NULLIF(executions_total,0),1)/1e6),3),0) apwait, NVL(TRUNC(SUM(b.ccwait_total/NVL(NULLIF(executions_total,0),1)/1e6),3),0) ccwaitFROM (SELECT snap_id, instance_number, elapsed_time_total, cpu_time_total, iowait_total, clwait_total, apwait_total, ccwait_total, executions_total FROM dba_hist_sqlstat WHERE sql_id = 'gm9dkz4u1hwfv') b, (SELECT snap_id, instance_number, begin_interval_time, end_interval_time FROM dba_hist_snapshot WHERE snap_id BETWEEN 0 AND 166142) a WHERE a.snap_id = b.snap_id(+) AND a.instance_number = b.instance_number(+) AND 'Y' = 'Y' AND a.instance_number = a.instance_number GROUP BY TO_CHAR(a.begin_interval_time, 'YYYY-MM-DD HH24:MI'), TO_CHAR(a.end_interval_time, 'YYYY-MM-DD HH24:MI') ORDER BY TO_CHAR(a.end_interval_time, 'YYYY-MM-DD HH24:MI');

1850 rows selected.

© 2016 Pythian

Page 49: Open Source or free tuning tools for Oracle databases

50

EDB360• database scope• no installation needed!

– just run a sqlfile• creates one zipfile with html for offline viewing

– also AWR etc• T | D | N control for access packs• convenient: graphs http://www.enkitec.com/products/edb360

© 2016 Pythian

Page 50: Open Source or free tuning tools for Oracle databases

51

EDB SCREENSHOTS

© 2016 Pythian

Page 51: Open Source or free tuning tools for Oracle databases

52

TUNAS360• best of sqld and snapper• samples v$-views for period

– works without AWR/ASH license!• produces output like sqld

© 2016 Pythian

Page 52: Open Source or free tuning tools for Oracle databases

53

TUNAS SCREENSHOTS

© 2016 Pythian

Page 53: Open Source or free tuning tools for Oracle databases

54

TUNAS SCREENSHOTS

© 2016 Pythian

Page 54: Open Source or free tuning tools for Oracle databases

55

GOOD OLD 10046 TRACE• guaranteed to catch everything (unlike sampling)

– why not turn on instance-wide?• overhead vs usefulness?

• no license needed at all

© 2016 Pythian

Page 55: Open Source or free tuning tools for Oracle databases

56

READING TRACEFILES• sqldeveloper• trcanlzr

– needs installing but now also part of SQLT• Kyle Hailey’s script

– https://github.com/khailey/oracle_trace_parsing/• Chris Antognini’s script

– https://antognini.ch/downloads/top2/chapter03/tvdxtat_40beta10_20140630.zip

© 2016 Pythian

Page 56: Open Source or free tuning tools for Oracle databases

57

REVIEW• make sqlplus great again

– rlsqlplus– sqlcl

• real-time analysis– snapper– moats– web-ash– sqldeveloper instance

viewer– TUNAs360

• historical analysis– Orasash / S-ASH– statspack– SQLT– eDB360– sqld360

• 10046 tracing– raw– various analyzers

© 2016 Pythian

Page 57: Open Source or free tuning tools for Oracle databases
Page 58: Open Source or free tuning tools for Oracle databases

59

@brosthttp://www.pythian.com/[email protected]

© 2016 Pythian