performance / tuning tips. to the point.                
About Us | Site Map | Privacy
Disclaimer | Feedback
About RSS Feed
Add to My Yahoo!
Google Reader or Homepage
del.icio.us performancewiki.com Latest Items


© 2006-2007 PerformanceWiki.com
All Rights Reserved.







Oracle Database Performance Tuning Guide 10g Release 2 (10.2)



The Oracle Performance Tuning Guide for 10g gathered years of performance tuning experience from Oracle engineers, and has tons of details for both tuning methodology to actual samples for various production setups. Some excerpts includes:

"Before starting on the instance or SQL tuning sections of this guide, make sure you have read Part II, "Performance Planning". Based on years of designing and performance experience, Oracle has designed a performance methodology. This brief section explains clear and simple activities that can dramatically improve system performance. It discusses the following topics:

  > Understanding Investment Options
  > Understanding Scalability
  > System Architecture
  > Application Design Principles
  > Workload Testing
  > Modeling
  > Implementation,
  > Deploying New Applications."

"The Symptoms and the Problems
A common pitfall in performance tuning is to mistake the symptoms of a problem for the actual problem itself. It is important to recognize that many performance statistics indicate the symptoms, and that identifying the symptom is not sufficient data to implement a remedy. For example:

  > Slow physical I/O - Generally, this is caused by poorly-configured disks. However, it could also be caused by a significant amount of unnecessary physical I/O on those disks issued by poorly-tuned SQL.
  > Latch contention - Rarely is latch contention tunable by reconfiguring the instance. Rather, latch contention usually is resolved through application changes.
  > Excessive CPU usage - Excessive CPU usage usually means that there is little idle CPU on the system. This could be caused by an inadequately-sized system, by untuned SQL statements, or by inefficient application programs.

TOC

Part I Performance Tuning
1 Performance Tuning Overview

    1.1 Introduction to Performance Tuning

        1.1.1 Performance Planning
        1.1.2 Instance Tuning
        1.1.3 SQL Tuning

    1.2 Introduction to Performance Tuning Features and Tools

        1.2.1 Automatic Performance Tuning Features
        1.2.2 Additional Oracle Tools

Part II Performance Planning
2 Designing and Developing for Performance

    2.1 Oracle Methodology
    2.2 Understanding Investment Options
    2.3 Understanding Scalability

        2.3.1 What is Scalability?
        2.3.2 System Scalability
        2.3.3 Factors Preventing Scalability

    2.4 System Architecture

        2.4.1 Hardware and Software Components
        2.4.2 Configuring the Right System Architecture for Your Requirements

    2.5 Application Design Principles

        2.5.1 Simplicity In Application Design
        2.5.2 Data Modeling
        2.5.3 Table and Index Design
        2.5.4 Using Views
        2.5.5 SQL Execution Efficiency
        2.5.6 Implementing the Application
        2.5.7 Trends in Application Development

    2.6 Workload Testing, Modeling, and Implementation

        2.6.1 Sizing Data
        2.6.2 Estimating Workloads
        2.6.3 Application Modeling
        2.6.4 Testing, Debugging, and Validating a Design

    2.7 Deploying New Applications

        2.7.1 Rollout Strategies
        2.7.2 Performance Checklist

3 Performance Improvement Methods

    3.1 The Oracle Performance Improvement Method

        3.1.1 Steps in The Oracle Performance Improvement Method
        3.1.2 A Sample Decision Process for Performance Conceptual Modeling
        3.1.3 Top Ten Mistakes Found in Oracle Systems

    3.2 Emergency Performance Methods

        3.2.1 Steps in the Emergency Performance Method

Part III Optimizing Instance Performance
4 Configuring a Database for Performance

    4.1 Performance Considerations for Initial Instance Configuration

        4.1.1 Initialization Parameters
        4.1.2 Configuring Undo Space
        4.1.3 Sizing Redo Log Files
        4.1.4 Creating Subsequent Tablespaces

    4.2 Creating and Maintaining Tables for Good Performance

        4.2.1 Table Compression
        4.2.2 Reclaiming Unused Space
        4.2.3 Indexing Data

    4.3 Performance Considerations for Shared Servers

        4.3.1 Identifying Contention Using the Dispatcher-Specific Views
        4.3.2 Identifying Contention for Shared Servers

5 Automatic Performance Statistics

    5.1 Overview of Data Gathering

        5.1.1 Database Statistics
        5.1.2 Operating System Statistics
        5.1.3 Interpreting Statistics

    5.2 Automatic Workload Repository

        5.2.1 Accessing the Automatic Workload Repository with Oracle Enterprise Manager
        5.2.2 Managing Snapshot and Baseline Data with APIs
        5.2.3 Automatic Workload Repository Views
        5.2.4 Automatic Workload Repository Reports
        5.2.5 Active Session History Reports

6 Automatic Performance Diagnostics

    6.1 Introduction to Database Diagnostic Monitoring
    6.2 Automatic Database Diagnostic Monitor

        6.2.1 ADDM Analysis Results
        6.2.2 An ADDM Example
        6.2.3 Setting Up ADDM
        6.2.4 Accessing ADDM with Oracle Enterprise Manager
        6.2.5 Diagnosing Database Performance Issues with ADDM
        6.2.6 Views with ADDM Information

7 Memory Configuration and Use

    7.1 Understanding Memory Allocation Issues

        7.1.1 Oracle Memory Caches
        7.1.2 Automatic Shared Memory Management
        7.1.3 Dynamically Changing Cache Sizes
        7.1.4 Application Considerations
        7.1.5 Operating System Memory Use
        7.1.6 Iteration During Configuration

    7.2 Configuring and Using the Buffer Cache

        7.2.1 Using the Buffer Cache Effectively
        7.2.2 Sizing the Buffer Cache
        7.2.3 Interpreting and Using the Buffer Cache Advisory Statistics
        7.2.4 Considering Multiple Buffer Pools
        7.2.5 Buffer Pool Data in V$DB_CACHE_ADVICE
        7.2.6 Buffer Pool Hit Ratios
        7.2.7 Determining Which Segments Have Many Buffers in the Pool
        7.2.8 KEEP Pool
        7.2.9 RECYCLE Pool

    7.3 Configuring and Using the Shared Pool and Large Pool

        7.3.1 Shared Pool Concepts
        7.3.2 Using the Shared Pool Effectively
        7.3.3 Sizing the Shared Pool
        7.3.4 Interpreting Shared Pool Statistics
        7.3.5 Using the Large Pool
        7.3.6 Using CURSOR_SPACE_FOR_TIME
        7.3.7 Caching Session Cursors
        7.3.8 Configuring the Reserved Pool
        7.3.9 Keeping Large Objects to Prevent Aging
        7.3.10 CURSOR_SHARING for Existing Applications
        7.3.11 Maintaining Connections

    7.4 Configuring and Using the Redo Log Buffer

        7.4.1 Sizing the Log Buffer
        7.4.2 Log Buffer Statistics

    7.5 PGA Memory Management

        7.5.1 Configuring Automatic PGA Memory
        7.5.2 Configuring OLAP_PAGE_POOL_SIZE

8 I/O Configuration and Design

    8.1 Understanding I/O
    8.2 Basic I/O Configuration

        8.2.1 Lay Out the Files Using Operating System or Hardware Striping
        8.2.2 Manually Distributing I/O
        8.2.3 When to Separate Files
        8.2.4 Three Sample Configurations
        8.2.5 Oracle-Managed Files
        8.2.6 Choosing Data Block Size

9 Understanding Operating System Resources

    9.1 Understanding Operating System Performance Issues

        9.1.1 Using Operating System Caches
        9.1.2 Memory Usage
        9.1.3 Using Operating System Resource Managers

    9.2 Solving Operating System Problems

        9.2.1 Performance Hints on UNIX-Based Systems
        9.2.2 Performance Hints on Windows Systems
        9.2.3 Performance Hints on HP OpenVMS Systems

    9.3 Understanding CPU
    9.4 Finding System CPU Utilization

        9.4.1 Checking Memory Management
        9.4.2 Checking I/O Management
        9.4.3 Checking Network Management
        9.4.4 Checking Process Management

10 Instance Tuning Using Performance Views

    10.1 Instance Tuning Steps

        10.1.1 Define the Problem
        10.1.2 Examine the Host System
        10.1.3 Examine the Oracle Statistics
        10.1.4 Implement and Measure Change

    10.2 Interpreting Oracle Statistics

        10.2.1 Examine Load
        10.2.2 Using Wait Event Statistics to Drill Down to Bottlenecks
        10.2.3 Table of Wait Events and Potential Causes
        10.2.4 Additional Statistics

    10.3 Wait Events Statistics

        10.3.1 SQL*Net Events
        10.3.2 buffer busy waits
        10.3.3 db file scattered read
        10.3.4 db file sequential read
        10.3.5 direct path read and direct path read temp
        10.3.6 direct path write and direct path write temp
        10.3.7 enqueue (enq:) waits
        10.3.8 events in wait class other
        10.3.9 free buffer waits
        10.3.10 latch events
        10.3.11 log file parallel write
        10.3.12 library cache pin
        10.3.13 library cache lock
        10.3.14 log buffer space
        10.3.15 log file switch
        10.3.16 log file sync
        10.3.17 rdbms ipc reply

    10.4 Idle Wait Events

Part IV Optimizing SQL Statements
11 SQL Tuning Overview

    11.1 Introduction to SQL Tuning
    11.2 Goals for Tuning

        11.2.1 Reduce the Workload
        11.2.2 Balance the Workload
        11.2.3 Parallelize the Workload

    11.3 Identifying High-Load SQL

        11.3.1 Identifying Resource-Intensive SQL
        11.3.2 Gathering Data on the SQL Identified

    11.4 Automatic SQL Tuning Features
    11.5 Developing Efficient SQL Statements

        11.5.1 Verifying Optimizer Statistics
        11.5.2 Reviewing the Execution Plan
        11.5.3 Restructuring the SQL Statements
        11.5.4 Controlling the Access Path and Join Order with Hints
        11.5.5 Restructuring the Indexes
        11.5.6 Modifying or Disabling Triggers and Constraints
        11.5.7 Restructuring the Data
        11.5.8 Maintaining Execution Plans Over Time
        11.5.9 Visiting Data as Few Times as Possible

12 Automatic SQL Tuning

    12.1 Automatic SQL Tuning Overview

        12.1.1 Query Optimizer Modes
        12.1.2 Types of Tuning Analysis

    12.2 SQL Tuning Advisor

        12.2.1 Input Sources
        12.2.2 Tuning Options
        12.2.3 Advisor Output
        12.2.4 Using SQL Tuning Advisor with Oracle Enterprise Manager
        12.2.5 Using SQL Tuning Advisor APIs

    12.3 SQL Tuning Sets

        12.3.1 Using SQL Tuning Sets with Oracle Enterprise Manager
        12.3.2 Using SQL Tuning Sets APIs

    12.4 SQL Profiles

        12.4.1 Accepting a SQL Profile
        12.4.2 Altering a SQL Profile
        12.4.3 Dropping a SQL Profile

    12.5 SQL Tuning Information Views

13 The Query Optimizer

    13.1 Optimizer Operations
    13.2 Choosing an Optimizer Goal

        13.2.1 OPTIMIZER_MODE Initialization Parameter
        13.2.2 Optimizer SQL Hints for Changing the Query Optimizer Goal
        13.2.3 Query Optimizer Statistics in the Data Dictionary

    13.3 Enabling and Controlling Query Optimizer Features

        13.3.1 Enabling Query Optimizer Features
        13.3.2 Controlling the Behavior of the Query Optimizer

    13.4 Understanding the Query Optimizer

        13.4.1 Components of the Query Optimizer
        13.4.2 Reading and Understanding Execution Plans

    13.5 Understanding Access Paths for the Query Optimizer

        13.5.1 Full Table Scans
        13.5.2 Rowid Scans
        13.5.3 Index Scans
        13.5.4 Cluster Access
        13.5.5 Hash Access
        13.5.6 Sample Table Scans
        13.5.7 How the Query Optimizer Chooses an Access Path

    13.6 Understanding Joins

        13.6.1 How the Query Optimizer Executes Join Statements
        13.6.2 How the Query Optimizer Chooses Execution Plans for Joins
        13.6.3 Nested Loop Joins
        13.6.4 Hash Joins
        13.6.5 Sort Merge Joins
        13.6.6 Cartesian Joins
        13.6.7 Outer Joins

14 Managing Optimizer Statistics

    14.1 Understanding Statistics
    14.2 Automatic Statistics Gathering

        14.2.1 GATHER_STATS_JOB
        14.2.2 Enabling Automatic Statistics Gathering
        14.2.3 Considerations When Gathering Statistics

    14.3 Manual Statistics Gathering

        14.3.1 Gathering Statistics with DBMS_STATS Procedures
        14.3.2 When to Gather Statistics

    14.4 System Statistics

        14.4.1 Workload Statistics
        14.4.2 Noworkload Statistics

    14.5 Managing Statistics

        14.5.1 Restoring Previous Versions of Statistics
        14.5.2 Exporting and Importing Statistics
        14.5.3 Restoring Statistics Versus Importing or Exporting Statistics
        14.5.4 Locking Statistics for a Table or Schema
        14.5.5 Setting Statistics
        14.5.6 Estimating Statistics with Dynamic Sampling
        14.5.7 Handling Missing Statistics

    14.6 Viewing Statistics

        14.6.1 Statistics on Tables, Indexes and Columns
        14.6.2 Viewing Histograms

15 Using Indexes and Clusters

    15.1 Understanding Index Performance

        15.1.1 Tuning the Logical Structure
        15.1.2 Index Tuning using the SQLAccess Advisor
        15.1.3 Choosing Columns and Expressions to Index
        15.1.4 Choosing Composite Indexes
        15.1.5 Writing Statements That Use Indexes
        15.1.6 Writing Statements That Avoid Using Indexes
        15.1.7 Re-creating Indexes
        15.1.8 Compacting Indexes
        15.1.9 Using Nonunique Indexes to Enforce Uniqueness
        15.1.10 Using Enabled Novalidated Constraints

    15.2 Using Function-based Indexes for Performance
    15.3 Using Partitioned Indexes for Performance
    15.4 Using Index-Organized Tables for Performance
    15.5 Using Bitmap Indexes for Performance
    15.6 Using Bitmap Join Indexes for Performance
    15.7 Using Domain Indexes for Performance
    15.8 Using Clusters for Performance
    15.9 Using Hash Clusters for Performance

16 Using Optimizer Hints

    16.1 Understanding Optimizer Hints

        16.1.1 Types of Hints
        16.1.2 Hints by Category

    16.2 Specifying Hints

        16.2.1 Specifying a Full Set of Hints
        16.2.2 Specifying a Query Block in a Hint
        16.2.3 Specifying Global Table Hints
        16.2.4 Specifying Complex Index Hints

    16.3 Using Hints with Views

        16.3.1 Hints and Complex Views
        16.3.2 Hints and Mergeable Views
        16.3.3 Hints and Nonmergeable Views

17 SQL Access Advisor

    17.1 Overview of the SQL Access Advisor in the DBMS_ADVISOR Package

        17.1.1 Overview of Using the SQL Access Advisor

    17.2 Using the SQL Access Advisor

        17.2.1 Steps for Using the SQL Access Advisor
        17.2.2 Privileges Needed to Use the SQL Access Advisor
        17.2.3 Setting Up Tasks and Templates
        17.2.4 Managing Workloads
        17.2.5 Working with Recommendations
        17.2.6 Performing a Quick Tune
        17.2.7 Managing Tasks
        17.2.8 Using SQL Access Advisor Constants
        17.2.9 Examples of Using the SQL Access Advisor

    17.3 Tuning Materialized Views for Fast Refresh and Query Rewrite

        17.3.1 DBMS_ADVISOR.TUNE_MVIEW Procedure

    17.4 Managing SQL Access Advisor Tasks Using Enterprise Manager

        17.4.1 Step 1: Select the Initial Options
        17.4.2 Step 2: Define the Workload Source
        17.4.3 Step 3: Choose the Types of Recommendations
        17.4.4 Step 4: Set a Schedule
        17.4.5 Step 5: Review and Submit Your Selections
        17.4.6 Step 6: Examine the Recommendations

18 Using Plan Stability

    18.1 Using Plan Stability to Preserve Execution Plans

        18.1.1 Using Hints with Plan Stability
        18.1.2 Storing Outlines
        18.1.3 Enabling Plan Stability
        18.1.4 Using Supplied Packages to Manage Stored Outlines
        18.1.5 Creating Outlines
        18.1.6 Using and Editing Stored Outlines
        18.1.7 Viewing Outline Data
        18.1.8 Moving Outline Tables

    18.2 Using Plan Stability with Query Optimizer Upgrades

        18.2.1 Moving from RBO to the Query Optimizer
        18.2.2 Moving to a New Oracle Release under the Query Optimizer

19 Using EXPLAIN PLAN

    19.1 Understanding EXPLAIN PLAN

        19.1.1 How Execution Plans Can Change
        19.1.2 Minimizing Throw-Away
        19.1.3 Looking Beyond Execution Plans
        19.1.4 EXPLAIN PLAN Restrictions

    19.2 The PLAN_TABLE Output Table
    19.3 Running EXPLAIN PLAN

        19.3.1 Identifying Statements for EXPLAIN PLAN
        19.3.2 Specifying Different Tables for EXPLAIN PLAN

    19.4 Displaying PLAN_TABLE Output

        19.4.1 Customizing PLAN_TABLE Output

    19.5 Reading EXPLAIN PLAN Output
    19.6 Viewing Parallel Execution with EXPLAIN PLAN

        19.6.1 Viewing Parallel Queries with EXPLAIN PLAN

    19.7 Viewing Bitmap Indexes with EXPLAIN PLAN
    19.8 Viewing Partitioned Objects with EXPLAIN PLAN

        19.8.1 Examples of Displaying Range and Hash Partitioning with EXPLAIN PLAN
        19.8.2 Examples of Pruning Information with Composite Partitioned Objects
        19.8.3 Examples of Partial Partition-wise Joins
        19.8.4 Examples of Full Partition-wise Joins
        19.8.5 Examples of INLIST ITERATOR and EXPLAIN PLAN
        19.8.6 Example of Domain Indexes and EXPLAIN PLAN

    19.9 PLAN_TABLE Columns

20 Using Application Tracing Tools

    20.1 End to End Application Tracing

        20.1.1 Accessing the End to End Tracing with Oracle Enterprise Manager
        20.1.2 Managing End to End Tracing with APIs and Views

    20.2 Using the trcsess Utility

        20.2.1 Syntax for trcsess
        20.2.2 Sample Output of trcsess

    20.3 Understanding SQL Trace and TKPROF

        20.3.1 Understanding the SQL Trace Facility
        20.3.2 Understanding TKPROF

    20.4 Using the SQL Trace Facility and TKPROF

        20.4.1 Step 1: Setting Initialization Parameters for Trace File Management
        20.4.2 Step 2: Enabling the SQL Trace Facility
        20.4.3 Step 3: Formatting Trace Files with TKPROF
        20.4.4 Step 4: Interpreting TKPROF Output
        20.4.5 Step 5: Storing SQL Trace Facility Statistics

    20.5 Avoiding Pitfalls in TKPROF Interpretation

        20.5.1 Avoiding the Argument Trap
        20.5.2 Avoiding the Read Consistency Trap
        20.5.3 Avoiding the Schema Trap
        20.5.4 Avoiding the Time Trap
        20.5.5 Avoiding the Trigger Trap

    20.6 Sample TKPROF Output

        20.6.1 Sample TKPROF Header
        20.6.2 Sample TKPROF Body
        20.6.3 Sample TKPROF Summary


See the full guide here.