1
Out-of-date statistics can impact performance Foreign key constraints can help the optimizer create better execution plans EXAMINE THE EXECUTION PLAN ANALYZE COLUMNS IN WHERE CLAUSE REVIEW EXISTING KEYS AND CONSTRAINTS REVIEW FILTER AND ACCESS PREDICATES TUNE THE QUERY RE-RUN THE QUERY RUN THE QUERY AND RECORD BASELINE METRICS EVALUATE EXISTING INDEXES GATHER TABLE INFORMATION 1 5 6 2 8 7 4 3 If it’s a view, get the underlying table definitions Review current statistics Focus on logical I/Os (number of logical reads) Capture wait events SARG-able (need index?) What is primary key definition? Know the selectivity and cardinality of the columns (is there data skew?) Review data types to avoid implicit conversions Find the expensive operators Get actual plan (use DBMS_XPLAN. DISPLAY_CURSOR) Get actual row counts for each step Reduce logical I/O Code-based SQL generators (e.g. EMF, LNO, Hibernate) Join/query/table hints Nested views that go across database links Know order of columns and their selectivity Avoid sub-queries Review table definitions Get table sizes and row count Know table relationships (avoid duplicating efforts later on) Look for high-cost steps and steps with largest number of rows Nested loop/ merge/hash joins Examine cost, row count and time Know how query is interpreted (e.g., bind variables) Don’t use explain plans Know if histograms or baselines are being used; get sample bind variable values Make small changes Get index definition Record the time, logical I/O and wait events, and compare with initial baseline Gather average execution times Scalar functions Abuse of wildcards (*) — pulling back too many rows Consider using a function- based index to exclude rows in very large tables Focus on most expensive operations first Seeks vs scans—which is more expensive in this scenario? Cursors and row-by-row processing Look for select * or scalar functions (some are less optimal) Find and fix query performance faster with SolarWinds Database Performance Analyzer . Free 14-day trial at: www.confio.com/ignite-download © 2014 Confio Software, a SolarWinds company. All rights reserved. RE-RUN THE QUERY LOOK FOR PERFORMANCE INHIBITORS 9 CONSIDER ADJUSTING INDEXES 10 11 12 Know when predicate is applied (should be earlier rather than later) TIP TIP Oracle Query Performance Tuning: A 12–Step Program

oracle query performance tuning 12 steps infographics

  • Upload
    sun-kim

  • View
    88

  • Download
    1

Embed Size (px)

DESCRIPTION

Oracle Query Performance Tuning

Citation preview

Page 1: oracle query performance tuning 12 steps infographics

Out-of-date statistics can impact

performance

Foreign key constraintscan help the optimizer create

better execution plans

EXAMINE THE EXECUTION PLAN

ANALYZECOLUMNS IN

WHERE CLAUSE

REVIEW EXISTING KEYS AND

CONSTRAINTS

REVIEW FILTER ANDACCESS PREDICATES

TUNETHE QUERY

RE-RUNTHE QUERY

RUN THE QUERY AND RECORD BASELINE

METRICS

EVALUATEEXISTING INDEXES

GATHER TABLE INFORMATION

1

5

6

2

8

7

4

3

If it’s a view, get the underlying table

definitionsReview current

statistics

Focus on logical I/Os (number of

logical reads)Capture wait events

SARG-able (need index?)

What is primary key definition?

Know the selectivity and cardinality of the columns

(is there data skew?)

Review data types to avoid implicit

conversions

Find the expensive operators

Get actual plan (use DBMS_XPLAN.DISPLAY_CURSOR)

Get actual row counts

for each step

Reduce logical I/O

Code-based SQL generators (e.g. EMF,

LNO, Hibernate)

Join/query/table hints

Nested views that go across database links

Know order of columns and their

selectivity

Avoid sub-queries

Review table definitions

Get table sizes and row count

Know table relationships (avoid duplicating efforts

later on)

Look for high-cost steps and steps with largest

number of rowsNested loop/merge/hash joins

Examine cost, row count and

timeKnow how query

is interpreted (e.g., bind variables)

Don’t use explain plans

Know if histograms or baselines are being

used; get sample bind variable values

Make small changes

Get index definition

Record the time, logical I/O and wait events,

and compare with initial baseline

Gather average execution times

Scalar functions

Abuse of wildcards (*)—pulling back too many

rows

Consider using a function-based index to exclude rows

in very large tables

Focus on most expensive operations first

Seeks vs scans—which is more expensive in this

scenario?

Cursors and row-by-row processing

Look for select * or scalar functions (some

are less optimal)

Find and fix query performance faster with SolarWinds Database Performance Analyzer. Free 14-day trial at: www.confio.com/ignite-download© 2014 Confio Software, a SolarWinds company. All rights reserved.

RE-RUN THE QUERY

LOOK FOR PERFORMANCE

INHIBITORS

9

CONSIDER ADJUSTING INDEXES

10

11

12

Know when predicate is applied (should be earlier rather than later)

TIP

TIP

Oracle Query Performance Tuning:A 12–Step Program