SlideShare a Scribd company logo
Oracle Performance Tuning

Eric Geng
2/24/2011
Agenda

• Oracle Basics
• Performance Tuning Methods
• SQL Tuning
Oracle Architecture Overview


• Database
• Instance
• Multi-Processes, share
  memory based C program
• Interfaces
  • SQL, PL/SQL
  • JDBC, OCI, Pro*C etc

• Administration Interfaces
  • Sqlplus, RMAN
  • Enterprise Manger
Processes

• PMON – Process Monitor
• SMON – System Monitor
• DBWR – Data Base Writer
• LGWR – Log Writer
• CKPT – Checkpoint
• ARCH – Log Archive
Wait Event
• Over 800 wait events, classified to 10+ types.
• They are self-diagnostic instruments – lots of counts
  and timers.
• Events
  •   db file scattered read
  •   db file sequential read
  •   enqueue waits
  •   library cache latch/mutex
  •   log file sync
  •   buffer busy waits
  •   free buffer waits
  •   …
Dynamic Views
• System statistics
  • v$sys_time_model, v$sysstat

• Session statistics
  • v$session, v$sesstat

• Contention statistics
  • v$lock, v$latch

• SQL staticstics
  • v$sql, v$sql_plan, v$sql_plan_statistics_all
Statspack/AWR
• Capture dynamic statistics into snapshots, then
  summary database activities between two snapshots.
• Statspack(9i)
  •   External scripts and packages
  •   Store snapshots in own-created table
  •   DBMS_STATSPACK
  •   sp*.sql

• Automatic Workload Repository(10g)
  •   Built-in feature: scripts, packages, tables, automatic job
  •   Store snapshots in DBA_HIST_* tables
  •   DBMS_WORKLOAD_REPOSITORY
  •   awr*.sql
AWR report
Enterprise Manager
• ASH
 • Sampling in seconds, support real-time Performance view in OEM
 • Store in SGA, v$active_session_history
 • Can also generate reports

• ADDM
 • Automatic Database Diagnostic Monitor
 • Identify issues and give recommendations from snapshots

• SQL Tuning Advisor
 • Create sql profile for sql statement

• SQL Access Advisor
 • Advice on index etc for sql statement
Enterprise Manager
Top SQL
• Elapsed time
• Parse time
• Executions
• Buffer gets
• Physical reads
Basic terminology
• Anoptimizeris the part of the RDBMS responsible for
  determining the most efficient way for a SQL
  statement to access data
• An execution plan is the complete sequence of
  operations required to resolve a SQL statement (the
  combination of access paths and join methods). The
  in-memory structure of a execution plan also can be
  called a cursor.
• A join method determines how two tables will be
  joined together (only two tables can be joined
  together at a time)
Hard parse
• Syntax analysis
  • Analyze "text" of SQL query
  • Detect syntax errors
  • Create internal query representation

• Semantic Checking
  • Validate SQL statement
  • View analysis
  • Incorporate constraints, triggers, etc.

• Query Optimization
  • Modify query to improve performance (Query Rewrite)
  • Choose the most efficient "access plan" (Query Optimization)

• Plan Generation
Optimizer
• Optimizer mode
 • RULE, CHOOSE, FIRST_ROWS, ALL_ROWS

• RULE is not supported
• Cost Based Optimizer
 • Highly depends on statistics

• Init parameters can affect the CBO
 •   optimizer_mode
 •   optimizer_index_cost_adj
 •   optimizer_index_cache
 •   data_block_multiple_read_count
Execution Plan
• Explain plan for <query>
  • Select * from table(dbms_xplan.display);

• dbms_xplan.display
• dbms_xplan.display_cursor
• dbms_xplan.display_awr
• Query with /*+ gather_plan_statistics */
  • more details in v$sql_plan_statistics_all
  • dbms_xplan.display_cursor(null, null, ‘ALLSTAT LAST’)
  • useful to find out wrong estimation by optimizer
Execution Plan
Plan of ‘ALLSTATS’
How to read an execution plan
• Order
 • Inner -> outer
 • At same level, up -> down. Some operations are iterative.

• Rows
 • Estimated by optimizer. Often cause problem.

• Time
 • Estimated by optimizer. Very inaccurate.

• A-Rows | A-Time
 • Actual numbers. Collected by /*+ gather_plan_statistics */
Operations in execution plan
• TABLE ACCESS FULL
• INDEX RANGE SCAN / TABLE ACCESS BY INDEX ROWID
• NESTED LOOPS / HASH JOIN / MERGE JOIN
• MERGE JOIN CARTESIAN
• INLIST ITERATOR
• SORT
• AGGREGATE
• FILTER
SQL trace/tkprof
• Alter session set sql_trace = true (SQL*PLUS)
• Alter session set events '10046 trace name context
  forever, level 12‘
  •   Level 1 equals sql_trace=true
  •   Level 4 includes bind values
  •   Level 8 includes wait time statistics
  •   Level 12 includes both bind values and wait time stats.

• dbms_monitor.session_trace_enable(sid, serial#,
  waits, binds)
• Trace file is in USER_DUMP_DEST folder
• tkprof<trace_file><output_file>
SQL trace
TKPROF
Autotrace
• Set autotrace on/traceonly (SQL*PLUS)
• Besides the plan –
10053 trace (optimizer trace)
• Alter session set events ’10053 trace name context
  forever, level 1‘
SQL Tuning
• Common rules
 • Filter as early as possible and as much as possible
 • Join order is more significant than join method

• Methods
 •   Statistics
 •   Hints (sql profile / outline)
 •   Rewrite
 •   Index
 •   Schema
Statistics
• DBMS_STATS.GATHER_XXX_STATS
  • analyze table xxx compute/estimate statistics is deprecated
  • GATHER_STATS_JOB

• USER_TABLES
  • NUM_ROWS, BLOCKS, AVG_ROW_LEN

• USER_TAB_COL_STATISTICS
  • NUM_DISTINCT, NUM_NULLS, NUM_BUCKETS, DENSITY

• USER_INDEXES
  • NUM_ROWS, DISTINCT_KEYS, LEAF_BLOCKS, CLUSTERING_FACTOR,
    BLEVEL, AVG_LEAF_BLOCKS_PER_KEY

• USER_HISTOGRAM
  • ENDPOINT_NUMBER, ENDPOINT_VALUE
Hint /*+ */
• Join order
  • ORDERED, LEADING

• Join method
  • USE_NL, USE_HASH, USE_MERGE, STAR

• Query transformation
  • USE_CONCAT, NO_EXPAND, UNNEST, PUSH_SUBQ

• Index
  • INDEX, INDEX_JOIN, INDEX_COMBINE

• Stats
  • DYNAMIC_SAMPLING, CADINALITY, SELECTIVITY

• Sql Profile is a set of hints fundamentally
SQL rewrite
• In / exists
• Not in / not exists
• Correlated / non-correlated
• Join / SubQuery
Challenges for stable plan
• Volatile data
• Screw data / histograms / bind value peeking
• Data correlation
Application Tuning
• Avoid unnecessary query
 • Check logics
 • Cache

• Avoid to fetch too many rows
 • Pagination

• Avoid complex query
 • Material views
 • Denormalize

• Optimize locking
• Optimize indexes
OLTP applications
• Use connection pool
• Use bind variables (CURSOR_SHARING=FORCE?)
• Prefer OPTIMIZER_MODE=FIRST_ROW
• Enforce pagination
• Caution with any query which join too many tables
• Caution with any Full Table Scan or Fast Full Index Scan
  on large table
• Caution with any Sort, Aggregation, Hash Join, Merge
  Join, especially Merge Join Cartesian on large sets
Links
• oracle-l@freelists.org
• https://groups.google.com/forum/?pli=1#!forum/com
  p.databases.oracle.server
• http://tahiti.oracle.com/
• http://www.oaktable.net/
• http://blogs.oracle.com/optimizer/
• http://blog.tanelpoder.com/
• http://jonathanlewis.wordpress.com/
• http://kevinclosson.wordpress.com/
• http://structureddata.org/
• http://www.eygle.com/
Q&A




      Q&A

More Related Content

PPTX
Oracle Database Performance Tuning Basics
PDF
Oracle db performance tuning
PPTX
Oracle database performance tuning
PDF
Oracle database performance tuning
PDF
Performance tuning in sql server
PPT
Earl Shaffer Oracle Performance Tuning pre12c 11g AWR uses
PDF
Oracle Performance Tuning Fundamentals
PDF
Analyzing and Interpreting AWR
Oracle Database Performance Tuning Basics
Oracle db performance tuning
Oracle database performance tuning
Oracle database performance tuning
Performance tuning in sql server
Earl Shaffer Oracle Performance Tuning pre12c 11g AWR uses
Oracle Performance Tuning Fundamentals
Analyzing and Interpreting AWR

What's hot (20)

PDF
SQL Server Tuning to Improve Database Performance
PDF
Ash architecture and advanced usage rmoug2014
PPTX
Database Performance Tuning
PPTX
Oracle Performance Tuning Training | Oracle Performance Tuning
PDF
Oracle Database Performance Tuning Concept
PDF
DB Time, Average Active Sessions, and ASH Math - Oracle performance fundamentals
PDF
SQL Server Query Tuning Tips - Get it Right the First Time
PDF
Awr1page OTW2018
PPT
Sql server performance tuning
PPTX
AWR DB performance Data Mining - Collaborate 2015
PPTX
Oracle Oracle Performance Tuning
PPT
Performance Tuning With Oracle ASH and AWR. Part 1 How And What
PDF
Aioug vizag oracle12c_new_features
PPTX
Oracle AWR Data mining
PDF
SQL Server Performance Tuning Baseline
PDF
Awr1page - Sanity checking time instrumentation in AWR reports
PDF
Awr + 12c performance tuning
DOC
Analyzing awr report
PPTX
Crack the complexity of oracle applications r12 workload v2
PDF
Ash and awr deep dive hotsos
SQL Server Tuning to Improve Database Performance
Ash architecture and advanced usage rmoug2014
Database Performance Tuning
Oracle Performance Tuning Training | Oracle Performance Tuning
Oracle Database Performance Tuning Concept
DB Time, Average Active Sessions, and ASH Math - Oracle performance fundamentals
SQL Server Query Tuning Tips - Get it Right the First Time
Awr1page OTW2018
Sql server performance tuning
AWR DB performance Data Mining - Collaborate 2015
Oracle Oracle Performance Tuning
Performance Tuning With Oracle ASH and AWR. Part 1 How And What
Aioug vizag oracle12c_new_features
Oracle AWR Data mining
SQL Server Performance Tuning Baseline
Awr1page - Sanity checking time instrumentation in AWR reports
Awr + 12c performance tuning
Analyzing awr report
Crack the complexity of oracle applications r12 workload v2
Ash and awr deep dive hotsos
Ad

Viewers also liked (20)

PPTX
Oracle DB Performance Tuning Tips
PPT
Oracle 10g Performance: chapter 00 intro live_short
PPT
OOUG - Oracle Performance Tuning with AAS
PDF
10g rac asm
PDF
Oracle SQL 1 Day Tutorial
PDF
Understanding index
PPTX
Hadoop Essential for Oracle Professionals
PPTX
zero data loss recovery appliance
PPTX
Database As A Service: OEM + ODA (OOW 15 Presentation)
PDF
Step By Step Install Oracle 10g Rac Asm On Windows
PDF
Oracle Database Undo Segment Operation Concept
PDF
Oracle Database Management Basic 1
PDF
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
PDF
Oracle Database SQL Tuning Concept
PPTX
Oracle cloud, private, public and hybrid
PDF
Oracle Index
PDF
Oracle LOB Internals and Performance Tuning
PPT
Database performance tuning and query optimization
PPSX
Database Performance Tuning Introduction
PDF
Performance tuning and optimization (ppt)
Oracle DB Performance Tuning Tips
Oracle 10g Performance: chapter 00 intro live_short
OOUG - Oracle Performance Tuning with AAS
10g rac asm
Oracle SQL 1 Day Tutorial
Understanding index
Hadoop Essential for Oracle Professionals
zero data loss recovery appliance
Database As A Service: OEM + ODA (OOW 15 Presentation)
Step By Step Install Oracle 10g Rac Asm On Windows
Oracle Database Undo Segment Operation Concept
Oracle Database Management Basic 1
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Oracle Database SQL Tuning Concept
Oracle cloud, private, public and hybrid
Oracle Index
Oracle LOB Internals and Performance Tuning
Database performance tuning and query optimization
Database Performance Tuning Introduction
Performance tuning and optimization (ppt)
Ad

Similar to Oracle performance tuning_sfsf (20)

PDF
An Approach to Sql tuning - Part 1
PDF
NOCOUG_201311_Fine_Tuning_Execution_Plans.pdf
PDF
Brad McGehee Intepreting Execution Plans Mar09
PDF
Brad McGehee Intepreting Execution Plans Mar09
PDF
Advanced tips for making Oracle databases faster
PPTX
Oracle Query Optimizer - An Introduction
PDF
31063115_1679409488310Developer_Tuning_Tips_-_UTOUG_Mar_2023.pdf
PPTX
05_DP_300T00A_Optimize.pptx
PDF
Hailey_Database_Performance_Made_Easy_through_Graphics.pdf
PDF
Discovering the Plan Cache (#SQLSat 206)
PDF
O_Need-for-Speed_Top-Five-Oracle-Performance-Tuning-Tips_NYOUG.pdf
PDF
Microsoft SQL Server Query Tuning
PPTX
Oracle performance tuning for java developers
PPTX
SQL Server Performance Tuning with DMVs
PDF
Discovering the plan cache (#SQLSat211)
PDF
SQLd360
PPTX
SQL Tuning 101
PDF
sqltuning101-170419021007-2.pdf
PPT
Top 10 Oracle SQL tuning tips
PPTX
Sql server lesson13
An Approach to Sql tuning - Part 1
NOCOUG_201311_Fine_Tuning_Execution_Plans.pdf
Brad McGehee Intepreting Execution Plans Mar09
Brad McGehee Intepreting Execution Plans Mar09
Advanced tips for making Oracle databases faster
Oracle Query Optimizer - An Introduction
31063115_1679409488310Developer_Tuning_Tips_-_UTOUG_Mar_2023.pdf
05_DP_300T00A_Optimize.pptx
Hailey_Database_Performance_Made_Easy_through_Graphics.pdf
Discovering the Plan Cache (#SQLSat 206)
O_Need-for-Speed_Top-Five-Oracle-Performance-Tuning-Tips_NYOUG.pdf
Microsoft SQL Server Query Tuning
Oracle performance tuning for java developers
SQL Server Performance Tuning with DMVs
Discovering the plan cache (#SQLSat211)
SQLd360
SQL Tuning 101
sqltuning101-170419021007-2.pdf
Top 10 Oracle SQL tuning tips
Sql server lesson13

Oracle performance tuning_sfsf

  • 2. Agenda • Oracle Basics • Performance Tuning Methods • SQL Tuning
  • 3. Oracle Architecture Overview • Database • Instance • Multi-Processes, share memory based C program • Interfaces • SQL, PL/SQL • JDBC, OCI, Pro*C etc • Administration Interfaces • Sqlplus, RMAN • Enterprise Manger
  • 4. Processes • PMON – Process Monitor • SMON – System Monitor • DBWR – Data Base Writer • LGWR – Log Writer • CKPT – Checkpoint • ARCH – Log Archive
  • 5. Wait Event • Over 800 wait events, classified to 10+ types. • They are self-diagnostic instruments – lots of counts and timers. • Events • db file scattered read • db file sequential read • enqueue waits • library cache latch/mutex • log file sync • buffer busy waits • free buffer waits • …
  • 6. Dynamic Views • System statistics • v$sys_time_model, v$sysstat • Session statistics • v$session, v$sesstat • Contention statistics • v$lock, v$latch • SQL staticstics • v$sql, v$sql_plan, v$sql_plan_statistics_all
  • 7. Statspack/AWR • Capture dynamic statistics into snapshots, then summary database activities between two snapshots. • Statspack(9i) • External scripts and packages • Store snapshots in own-created table • DBMS_STATSPACK • sp*.sql • Automatic Workload Repository(10g) • Built-in feature: scripts, packages, tables, automatic job • Store snapshots in DBA_HIST_* tables • DBMS_WORKLOAD_REPOSITORY • awr*.sql
  • 9. Enterprise Manager • ASH • Sampling in seconds, support real-time Performance view in OEM • Store in SGA, v$active_session_history • Can also generate reports • ADDM • Automatic Database Diagnostic Monitor • Identify issues and give recommendations from snapshots • SQL Tuning Advisor • Create sql profile for sql statement • SQL Access Advisor • Advice on index etc for sql statement
  • 11. Top SQL • Elapsed time • Parse time • Executions • Buffer gets • Physical reads
  • 12. Basic terminology • Anoptimizeris the part of the RDBMS responsible for determining the most efficient way for a SQL statement to access data • An execution plan is the complete sequence of operations required to resolve a SQL statement (the combination of access paths and join methods). The in-memory structure of a execution plan also can be called a cursor. • A join method determines how two tables will be joined together (only two tables can be joined together at a time)
  • 13. Hard parse • Syntax analysis • Analyze "text" of SQL query • Detect syntax errors • Create internal query representation • Semantic Checking • Validate SQL statement • View analysis • Incorporate constraints, triggers, etc. • Query Optimization • Modify query to improve performance (Query Rewrite) • Choose the most efficient "access plan" (Query Optimization) • Plan Generation
  • 14. Optimizer • Optimizer mode • RULE, CHOOSE, FIRST_ROWS, ALL_ROWS • RULE is not supported • Cost Based Optimizer • Highly depends on statistics • Init parameters can affect the CBO • optimizer_mode • optimizer_index_cost_adj • optimizer_index_cache • data_block_multiple_read_count
  • 15. Execution Plan • Explain plan for <query> • Select * from table(dbms_xplan.display); • dbms_xplan.display • dbms_xplan.display_cursor • dbms_xplan.display_awr • Query with /*+ gather_plan_statistics */ • more details in v$sql_plan_statistics_all • dbms_xplan.display_cursor(null, null, ‘ALLSTAT LAST’) • useful to find out wrong estimation by optimizer
  • 18. How to read an execution plan • Order • Inner -> outer • At same level, up -> down. Some operations are iterative. • Rows • Estimated by optimizer. Often cause problem. • Time • Estimated by optimizer. Very inaccurate. • A-Rows | A-Time • Actual numbers. Collected by /*+ gather_plan_statistics */
  • 19. Operations in execution plan • TABLE ACCESS FULL • INDEX RANGE SCAN / TABLE ACCESS BY INDEX ROWID • NESTED LOOPS / HASH JOIN / MERGE JOIN • MERGE JOIN CARTESIAN • INLIST ITERATOR • SORT • AGGREGATE • FILTER
  • 20. SQL trace/tkprof • Alter session set sql_trace = true (SQL*PLUS) • Alter session set events '10046 trace name context forever, level 12‘ • Level 1 equals sql_trace=true • Level 4 includes bind values • Level 8 includes wait time statistics • Level 12 includes both bind values and wait time stats. • dbms_monitor.session_trace_enable(sid, serial#, waits, binds) • Trace file is in USER_DUMP_DEST folder • tkprof<trace_file><output_file>
  • 23. Autotrace • Set autotrace on/traceonly (SQL*PLUS) • Besides the plan –
  • 24. 10053 trace (optimizer trace) • Alter session set events ’10053 trace name context forever, level 1‘
  • 25. SQL Tuning • Common rules • Filter as early as possible and as much as possible • Join order is more significant than join method • Methods • Statistics • Hints (sql profile / outline) • Rewrite • Index • Schema
  • 26. Statistics • DBMS_STATS.GATHER_XXX_STATS • analyze table xxx compute/estimate statistics is deprecated • GATHER_STATS_JOB • USER_TABLES • NUM_ROWS, BLOCKS, AVG_ROW_LEN • USER_TAB_COL_STATISTICS • NUM_DISTINCT, NUM_NULLS, NUM_BUCKETS, DENSITY • USER_INDEXES • NUM_ROWS, DISTINCT_KEYS, LEAF_BLOCKS, CLUSTERING_FACTOR, BLEVEL, AVG_LEAF_BLOCKS_PER_KEY • USER_HISTOGRAM • ENDPOINT_NUMBER, ENDPOINT_VALUE
  • 27. Hint /*+ */ • Join order • ORDERED, LEADING • Join method • USE_NL, USE_HASH, USE_MERGE, STAR • Query transformation • USE_CONCAT, NO_EXPAND, UNNEST, PUSH_SUBQ • Index • INDEX, INDEX_JOIN, INDEX_COMBINE • Stats • DYNAMIC_SAMPLING, CADINALITY, SELECTIVITY • Sql Profile is a set of hints fundamentally
  • 28. SQL rewrite • In / exists • Not in / not exists • Correlated / non-correlated • Join / SubQuery
  • 29. Challenges for stable plan • Volatile data • Screw data / histograms / bind value peeking • Data correlation
  • 30. Application Tuning • Avoid unnecessary query • Check logics • Cache • Avoid to fetch too many rows • Pagination • Avoid complex query • Material views • Denormalize • Optimize locking • Optimize indexes
  • 31. OLTP applications • Use connection pool • Use bind variables (CURSOR_SHARING=FORCE?) • Prefer OPTIMIZER_MODE=FIRST_ROW • Enforce pagination • Caution with any query which join too many tables • Caution with any Full Table Scan or Fast Full Index Scan on large table • Caution with any Sort, Aggregation, Hash Join, Merge Join, especially Merge Join Cartesian on large sets
  • 32. Links • oracle-l@freelists.org • https://groups.google.com/forum/?pli=1#!forum/com p.databases.oracle.server • http://tahiti.oracle.com/ • http://www.oaktable.net/ • http://blogs.oracle.com/optimizer/ • http://blog.tanelpoder.com/ • http://jonathanlewis.wordpress.com/ • http://kevinclosson.wordpress.com/ • http://structureddata.org/ • http://www.eygle.com/
  • 33. Q&A Q&A