Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Understanding SQL Trace, TKPROF and Execution Plan for beginners

1,837 views

Published on

The three fundamental steps of SQL Tuning are: 1) Diagnostics Collection; 2) Root Cause Analysis (RCA); and 3) Remediation. This introductory session on SQL Tuning is for novice DBAs and Developers that are required to investigate a piece of an application performing poorly.

On this session participants will learn about producing a SQL Trace then a summary TKPROF report. A sample TKPROF is navigated with the audience, where the trivial and the no so trivial is exposed and explain. Execution Plans are also navigated and explained, so participants can later untangle complex Execution Plans and start diagnosing SQL performing badly.

This session encourages participants to ask all kind of questions that could be potential road-blocks for deeper understanding of how to address a SQL performing poorly.

Published in: Software
  • Be the first to comment

Understanding SQL Trace, TKPROF and Execution Plan for beginners

  1. 1. Understanding SQL Trace, TKPROF and Execution Plan for beginners Carlos Sierra
  2. 2. Agenda • Motivation • SQL Trace • TKPROF • Execution Plan
  3. 3. Motivation • My report is taking too long… • One Materialize View is sudently hanging... • This page is taking long since last upgrade... • It runs faster on my development instance... • Everything is slow, then the DBA has to fix it... • Where to start?
  4. 4. SQL Trace • Performance information on individual SQL • CPU and Elapsed Time • Wait Events • Execution Plan • Rows processed • Call count (parse, execute and fetch) • Physical and Logical reads
  5. 5. Tracing Process 1. Turn SQL Trace on 2. Execute some SQL or PL/SQL 3. Turn SQL Trace off 4. Find Trace File 5. Aggregate Trace into a Summary report (TKPROF) 6. Review Trace and TKPROF
  6. 6. Turning SQL Trace on and off • DBMS_SESSION.SESSION_TRACE_ENABLE – WAITS (default TRUE) – BINDS (default FALSE) – PLAN_STAT (default NULL) • NEVER • FIRST_EXECUTION (equivalent to NULL) • ALL_EXECUTIONS • DBMS_SESSION.SESSION_TRACE_DISABLE
  7. 7. Other ways to turn Trace on and off • DBMS_SESSION.SET_SQL_TRACE(TRUE|FALSE) • ALTER SESSION SET SQL_TRACE = TRUE|FALSE • ALTER SESSION SET EVENT 10046 • DBMS_MONITOR.SESSION_TRACE_ENABLE or DIS • ALTER SYSTEM SET EVENTS 'sql_trace [sql:&&sql_id] bind=true, wait=true'; • ORADEBUG • Oracle Enterprise Manager (OEM)
  8. 8. Alter Session • ALTER SESSION SET – SQL_TRACE = [ TRUE | FALSE ] – EVENTS ‘10046 trace name context forever, level N’ • N = 1: all executions (10g-) or 1st execution (11g+) • N = 4: Binds • N = 8: Waits • N = 12 = 4 + 8 • N = 16: each execution (11g+) • N = 64: 1st + each where DB time > 1min (11.2.0.2+)
  9. 9. Finding SQL Trace • Get Trace Filename from V$DIAG_INFO (11g+) • Get Trace Directory from USER_DUMP_DEST (10g-) – Use V$DIAG_INFO on 11g and 12c
  10. 10. Sample SQL over Sample HR Schema
  11. 11. GettingSQLTrace
  12. 12. MOS39817.1
  13. 13. TKPROF • Inputs a SQL Trace • Outputs an aggregated TKPROF report • Example: – tkprof trace_file.trc tkprof.txt • Sort (optional): – sort=(exeela,fchela)
  14. 14. GettingaTKPROF
  15. 15. • Rows returned on 1st execution, in average and max • Consistent reads, physical reads/writes, etc.
  16. 16. • Metrics include aggregates of sub-operations • Rows processed (returned by operations)
  17. 17. • Wait events (enabled by default on API used) • Useful to understand gap between CPU and Elapsed
  18. 18. Execution Plan • Set of steps to execute a SQL statement – Mostly Access Operations and Joins • Better understood by correlating Plan to SQL • Hard to read without predicate information • Column projection also eases understanding • Figuring out execution order can be a challenge!
  19. 19. Common Access Operations • Table access – Full – By ROWID • Index access – Full – Range – Unique
  20. 20. Join Types • Equijoin • Outer-join • Semi-join • Anti-join • Cross-join • Self-join
  21. 21. Name the Subquery In-line View Scalar SQ Non-correlated SQ Correlated SQ
  22. 22. Join Methods • Nested Loop – Small sets – Index access • Hash Join – Medium to large sets – Equality predicates • Sort Merge Join
  23. 23. Nested Loop
  24. 24. Hash Join
  25. 25. Sort Merge Join
  26. 26. Getting Predicates and Projection • Use DBMS_XPLAN • DISPLAY (from PLAN_TABLE) – FORMAT: ADVANCED • DISPLAY_CURSOR (from Memory thus actual plan) – FORMAT: ADVANCED ALLSTATS LAST • SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY%());
  27. 27. Two Tables Join
  28. 28. Five Tables Join
  29. 29. e2(6) ▻ e1(7) ▻ jh(8) ▻ d(12) ▻ l(14) 1. e2 ▻ e1 : hj(3) 2. ▻ jh : nl(2) 3. ▻ d : nl(1) semi pp 4. ▻ l : nl(11)
  30. 30. SQLDeveloper
  31. 31. TKPROF
  32. 32. Summary • Trace shows performance information per SQL • Trace and TKPROF do not require additional license • Trace includes Execution Plan when Cursor closes • DBMS_XPLAN provides Predicates and Projection • Understand first what the SQL does • Then correlate SQL to Execution Plan • Focus where the Time is spent!
  33. 33. References • My Oracle Support (MOS) – 39817.1 Interpreting Raw SQL_TRACE output – 376442.1 How to Collect 10046 Trace (SQL_TRACE) Diagnostics for Performance Issues • https://oracle-base.com/articles/misc/sql-trace- 10046-trcsess-and-tkprof • Oracle Documentation • Google
  34. 34. Questions
  35. 35. The End • http://carlos-sierra.net/ – Blog and downloads • carlos.sierra.usa@gmail.com – Questions and follow-up • Keep learning!

×