Oracle Database Performance Tuning: Presented By-Rahul Gaikwad

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 42

Oracle Database Performance

Tuning
Presented ByRahul Gaikwad

What is Database Tuning?


Database tuning is a group of activities

used to optimize the performance of a


database.
Goal Of Database Tuning?
To maximize use of system resources
To perform task as efficiently
To work rapidly as possible

www.yogijicreations.com

Why and when should one


tune?
Slow Physical I/O

-caused by poorly-configured disks


-caused by unnecessary physical I/O
-caused by poorly-tuned SQL.
Excessive CPU usage
-It means that there is little idle CPU on the system
-caused by an inadequately-sized system,
-caused by untuned SQLstatements
-caused inefficient application programs.
Latch Contention
Rarely is latch contention tunable by reconfiguring the
instance. Rather, latch contention usually is resolved
through application changes.
www.yogijicreations.com

Causes for low Performance


Bad Connection Management
Bad Use of Cursors and the Shared Pool
Bad SQL
Use of Nonstandard Initialization

Parameters
Getting Database I/O Wrong
Redo Log Setup Problems
Long Full Table Scans
High Amounts of Recursive (SYS) SQL
www.yogijicreations.com

Where should we do the tuning?


Database Design
Poor system performance usually results from a poor database design.
One should generally normalize to the 3NF.
Selective denormalization can provide valuable performance

improvements..
Application Tuning:
Approximately 80% of all Oracle system performance problems are
resolved by coding optimal SQL.
Memory Tuning:
By Properly size your database buffers (shared pool, buffer cache, log
buffer, etc)
By looking at your wait events, buffer hit ratios, system swapping and
paging, etc.
Disk I/O Tuning:
Database files needs to be properly sized.
Also look for frequent disk sorts, full table scans, data fragmentation, etc.
Eliminate Database Contention:
Study database locks, latches and wait events carefully and eliminate
where possible.
Tunewww.yogijicreations.com
the Operating System:
Monitor and tune operating system CPU, I/O and memory utilization .

Optimizing the optimizer


Optimizer inputs
Table and index
Structure

Cardinality
Estimates

Object Statistics

DB parameters
And config

IO and CPU
Estimates

System Statistics

www.yogijicreations.com

Cost estimate

Database Statistics
Database statistics provide
information on the type of load on
the database, as well as the internal
and external resources used by the
database.

Performance Data
Statistics
Time Model
SQL
Wait
Metrics
Stats

Sessions

Wait events are statistics that indicate that it


have to wait for an event to complete
before being able to continue the processing.
common examples of the waitsWait Events

Application: locks waits caused by row level


locking
Commit: waits for redo log write confirmation
after a commit
Idle: signify the session is inactive
Network: waits for data to be sent over the
network
User I/O: wait for blocks to be read off a disk

Time Model Statistics


The V$SESS_TIME_MODEL and V$SYS_TIME_MODEL
views provide time model statistics
The most important of the time model statistics is DB time.
This statistics represents the total time spent in
database calls and is a indicator of the total instance
workload.
It is calculated by aggregating the CPU and wait times
of all sessions
DB time is measured cumulatively from the time that the
instance was started.
For example, a instance that has been running for 30
minutes could have four active user sessions whose
cumulative DB time is approximately 120 minutes.

Active Session History (ASH)

The V$ACTIVE_SESSION_HISTORY view


provides sampled session activity in the
instance.
Active sessions are sampled every second and
are stored in a circular buffer in SGA.
Active Session includes any session that was
on the CPU at the time of sampling.

System and Session Statistics


A large number of cumulative database statistics are
available on a system and session level through the
V$SYSSTAT and V$SESSTAT views.
Operating System Statistics

Operating system statistics provide information on the usage


and performance of the main hardware components of
the system, as well as the performance of the operating
system itself.
It is always best to consider operating system statistics as a
diagnostic tool, similar to the way many doctors use body
temperature, pulse rate, and patient pain when making a
diagnosis..

Operating system statistics include the following:

CPU Statistics
Virtual Memory Statistics
Disk Statistics
Network Statistics

Automatic Workload Repository


The Automatic Workload Repository (AWR) collects, processes, and
maintains performance statistics for problem detection and self-tuning
purposes.
This data is stored both in memory and in the database.
AWR include:

Time model statistics i.e. V$SYS_TIME_MODEL and


V$SESS_TIME_MODEL views
Some of the system and session statistics collected in the V$SYSSTAT and
V$SESSTAT views
Active Session History (ASH) statistics, representing the history of recent
sessions activity

AWR automatically generates snapshots of the performance data


once every hour
and collects the statistics in the workload repository.

Metric
A metric is defined as the rate of change in
some cumulative statistic.
That rate can be measured against time,
transactions, or database calls.
For example, the number database calls per
second is a metric.
A history of recent metric values is available
through V$ views.

Tools or Utilities for PT

V$SQL_PLAN

Find SQLs with high resource costs


EXPLAIN

PLAN & DBMS_STAT

Determine the execution plan


SQL

Trace/Tkprof

Best drilldown at the session level

V$SQL_PLAN
Used

to display the execution plan of a SQL


statement:

After

the statement has executed, you can


display the plan by querying the
V$SQL_PLAN view.

The

V$SQL_PLAN_STATISTICS view provides


the actual execution statistics for every
operation in the plan, such as the number
of output rows and elapsed time.
www.yogijicreations.com

EXPLAIN PLAN
The

EXPLAIN PLAN statement displays execution plans for


SELECT, UPDATE, INSERT, and DELETE statements.

statement's execution plan is the sequence of operations


Oracle performs to run the statement.

The

row source tree is the core of the execution plan. It shows :

ordering of the tables


access method for each table
join method for tables
Data operations like filter, sort, or aggregation

The

plan table Also contains information :

Optimization, such as the cost and cardinality of each operation


Partitioning, such as the set of accessed partitions
Parallel execution, such as the distribution method of join inputs

www.yogijicreations.com

PLAN_TABLE Output Table


The

PLAN_TABLE is automatically created to


hold the output of an EXPLAIN PLAN
statement for all users.

PLAN_TABLE

is the default sample output


table into which the EXPLAIN PLAN
statement inserts rows describing execution
plans.

While

a PLAN_TABLE table is automatically


set up for each user, you can use the SQL
script utlxplan.sql to manually create a local
PLAN_TABLE in your schema.

www.yogijicreations.com

uses EXPLAIN PLAN


To

examine a SQL statement that


Select employee_id, job_title, salary, and
department_name for the employees
whose IDs are less than 103.
Example Using EXPLAIN PLAN
SELECT e.employee_id, j.job_title, e.salary,
d.department_name
FROM employees e, jobs j, departments d
WHERE e.employee_id < 103
AND e.job_id = j.job_id
AND e.department_id = d.department_id;
www.yogijicreations.com

EXPLAIN PLAN Output


----------------------------------------------------------------------------------| Id | Operation | Name |Rows |Bytes | Cost (%CPU)|
----------------------------------------------------------------------------------| 0 | SELECT STATEMENT
| | 3 | 189 | 10 (10)|
| 1 | NESTED LOOPS | | 3 | 189 | 10 (10)|
| 2 | NESTED LOOPS | | 3 | 141 | 7 (15)|
|* 3 | TABLE ACCESS FULL | EMPLOYEES | 3 | 60 | 4 (25)|
| 4 | TABLE ACCESS BY INDEX ROWID | JOBS | 19 | 513 | 2 (50)|
|* 5 | INDEX UNIQUE SCAN | JOB_ID_PK | 1 | |
|
| 6 | TABLE ACCESS BY INDEX ROWID | DEPARTMENTS | 27 | 432 | 2 (50)|
|* 7 | INDEX UNIQUE SCAN | DEPT_ID_PK | 1 | |
|
----------------------------------------------------------------------------------Predicate Information (identified by operation id):
--------------------------------------------------3 - filter("E"."EMPLOYEE_ID"<103)
5 - access("E"."JOB_ID"="J"."JOB_ID")
7 - access("E"."DEPARTMENT_ID"="D"."DEPARTMENT_ID")

www.yogijicreations.com

Steps of Execution Plan


Step

3 reads all rows of the employees table.


Step 5 looks up each job_id in JOB_ID_PK index and finds the
rowids of the associated rows in the jobs table.
Step 4 retrieves the rows with rowids that were returned by Step
5 from the jobs table.
Step 7 looks up each department_id in DEPT_ID_PK index and
finds the rowids of the associated rows in the departments table.
Step 6 retrieves the rows with rowids that were returned by Step
7 from the departments table.
The following steps in Example operate on rows returned by the
previous row source:
Step 2 performs the nested loop operation on job_id in the jobs
and employees tables, accepting row sources from Steps 3 and 4,
joining each row from Step 3 source to its corresponding row in
Step 4, and returning the resulting rows to Step 2.
Step 1 performs the nested loop operation, accepting row
sources from Step2 and Step6, joining each row from Step 2
source to its corresponding row in Step 6, and returning the
resulting rows to Step 1.
www.yogijicreations.com

www.yogijicreations.com

Full Table Scans


This

type of scan reads all rows from a table


and filters out those that do not meet the
selection criteria.
During a full table scan, all blocks in the table
that are under the high water mark are
scanned.
The high water mark indicates the amount of
used space, or space that had been formatted
to receive data.
Each row is examined to determine whether it
satisfies the statement's WHERE clause.

www.yogijicreations.com

Rowid Scans
The

rowid of a row specifies the data files and


data block containing the row and the location
of the row in that block.
Locating a row by specifying its rowid is the
fastest way to retrieve a single row, because
the exact location of the row in the database is
specified.
To access a table by rowid, Oracle first obtains
the rowids of the selected rows, either from the
statement's WHERE clause or through an index
scan of one or more of the table's indexes.
Oracle then locates each selected row in the
table based on its rowid.
www.yogijicreations.com

Index Scans
In

this method, a row is retrieved by traversing the index, using the


indexed column values specified by the statement.
An index scan retrieves data from an index based on the value of one or
more columns in the index.
To perform an index scan, Oracle searches the index for the indexed
column values accessed by the statement.
If the statement accesses only columns of the index, then Oracle reads the
indexed column values directly from the index, rather than from the
table.
The index contains not only the indexed value, but also the rowids of rows
in the table having that value.
Therefore, if the statement accesses other columns in addition to the
indexed columns, then Oracle can find the rows in the table by using either
a table access by rowid or a cluster scan.
An index scan types:
Assessing I/O for Blocks, not Rows
Index Unique Scans
Index Range Scans
Index Range Scans Descending
Index Skip Scans
Full Scans
Fast Full Index Scans
Index Joins

www.yogijicreations.com

SINGLE TABLE LOOKUP


Index

or table scan?
Avoid accidental table scans
Optimize indexes
best

combination of concatenated indexes

Optimize

necessary table scans

Vertical/Horizontal

partitioning

1000
Full Scan no caching
Index sorted data, no caching
Index unsorted, cached data
Full Table scan, cached data

100

Elasped Time (s)

Break even points for index vs table scan

10

1
0

10

20

30

40

50

60

Pct of table accessed

70

80

90

100

Concatenated Index Effectiveness


last,first,birthyear,id

last,first,BirthYear

last+first name

last name

SELECT cust_id
FROM sh.customers c
WHERE cust_first_name = 'Connor'
AND cust_last_name = 'Bishop'
AND cust_year_of_birth = 1976;

63

None

1459

200

400

600

800
Logical IO

1000

1200

1400

1600

BITMAP INDEXES

BITMAP INDEXES

100

10

Elapsed Time (s)

0.1

0.01

10

100

1000

10000

Distinct values in table


Bitmap index

B*-Tree index

Full table scan

100000

1000000

VERTICAL PARTITIONING

Joins

OPTIMIZING JOINS
Best

join order

Join

Type:

Eliminate
Nested

rows as early as possible

loops
Optimize the join index
Sort merge
Avoid, esp. if memory scarce
Hash join
Avoid multi-pass executions

NESTED LOOPS JOIN


prod_id,channel_id,cust_id,time_id,promo_id

2.2

time_id

Indexing

3.14

prod_id,channel_id

23.43

prod_id

48.36

No Index

546.55

100

200

Elapsed time (s)

300

400

500

600

SORT-MERGE AND HASH JOIN


250

200

150

Disk Sort
Elapsed Time (s)
100

In Memory
Multi pass disk sort

50

Single pass disk sort

0
1

10

100
Workarea Memory (MB)

Hash Join

Sort Merge Join

In Memory

1000

BITMAP JOIN INDEX

BITMAP JOIN PERFORMANCE


Full table scan

Access Path

13,480

Bitmap index

1,524

Bitmap Join index 68

2000

4000

6000
Logical IO

SELECT SUM (amount_sold)


FROM customers JOIN sales s USING (cust_id) WHERE
cust_email='flint.jeffreys@company2.com';

8000

10000

12000

14000

SORTING WHAT WE EXPECT

Multi-pass
Disk Sort

Time

Single Pass
Disk Sort
Memory Sort

PGA Memory available (MB)

Table/Index IO

CPU Time

Temp Segment IO

DML

DML TUNING - INDEXES


7

16,316

14,285

Number of indexes

12,727

10,719

8,691

6,671

1 (PK only)

1,191

2,000

4,000

6,000

8,000

10,000

Logical reads required

12,000

14,000

16,000

18,000

MULTI-TABLE INSERT

Multi-table insert

Insert both
Insert EMEA
Insert US

Two Inserts

Elapsed time (s)

10

MERGE

Merge
Insert
Update

INSERT + UPDATE

3.89

3.71

6
Elapsed Time (s)

3.32

10

12

Top 10 Oracle SQL tuning tips


1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

Design and develop with performance in mind


Establish a tuning environment
Index wisely
Reduce parsing
Take advantage of Cost Based Optimizer
Avoid accidental table scans
Optimize necessary table scans
Optimize joins
Use array processing
Consider PL/SQL for tricky SQL

www.yogijicreations.com

THANK YOU.

www.yogijicreations.com

For queries: info@yogijicreations.com

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy