Oracle9i Database Performance Tuning Guide and Reference Release 2 (9.2) March 2002 Part No. A96533-01 Oracle9i Database Performance Tuning Guide and Reference, Release 2 (9.2) Part No. A96533-01 Copyright © 2001, 2002 Oracle Corporation. All rights reserved. Primary Author: Lenore Luscher Contributing Author: Connie Dialeris Green Graphic Designer: Valarie Moore Contributors: James Barlow, Qiang Cao, Sumanta Chatterjee, Benoit Dageville, Vinayagam Djegaradjane, Harvey Eneman, Bjorn Engsig, Cecilia Gervasio, Leslie Gloyd, Lester Gutierrez, Karl Haas, Brian Hirano, Andrew Holdsworth, Mamdouh Ibrahim, Christopher Jones, Srinivas Kareenhalli, Stella Kister, Herve Lejeune, Yunrui Li, Juan Loaiza, George Lumpkin, Joe McDonald, Bill McKenna, Sujatha Muthulingam, Gary Ngai, Michael Orlowski, Richard Powell, Shankar Raman, Vinay Srihari, Sankar Subramanian, Margaret Susairaj, Hal Takahara, Nitin Vengurlekar, Stephen Vivian, Simon Watt, Andrew Witkowski, Graham Wood, and Mohamed Zait. The Programs (which include both the software and documentation) contain proprietary information of Oracle Corporation; they are provided under a license agreement containing restrictions on use and disclosure and are also protected by copyright, patent and other intellectual and industrial property laws. Reverse engineering, disassembly or decompilation of the Programs, except to the extent required to obtain interoperability with other independently created software or as specified by law, is prohibited. The information contained in this document is subject to change without notice. If you find any problems in the documentation, please report them to us in writing. Oracle Corporation does not warrant that this document is error-free. Except as may be expressly permitted in your license agreement for these Programs, no part of these Programs may be reproduced or transmitted in any form or by any means, electronic or mechanical, for any purpose, without the express written permission of Oracle Corporation. If the Programs are delivered to the U.S. Government or anyone licensing or using the programs on behalf of the U.S. Government, the following notice is applicable: Restricted Rights Notice Programs delivered subject to the DOD FAR Supplement are "commercial computer software" and use, duplication, and disclosure of the Programs, including documentation, shall be subject to the licensing restrictions set forth in the applicable Oracle license agreement. Otherwise, Programs delivered subject to the Federal Acquisition Regulations are "restricted computer software" and use, duplication, and disclosure of the Programs shall be subject to the restrictions in FAR 52.227-19, Commercial Computer Software - Restricted Rights (June, 1987). Oracle Corporation, 500 Oracle Parkway, Redwood City, CA 94065. The Programs are not intended for use in any nuclear, aviation, mass transit, medical, or other inherently dangerous applications. It shall be the licensee's responsibility to take all appropriate fail-safe, backup, redundancy, and other measures to ensure the safe use of such applications if the Programs are used for such purposes, and Oracle Corporation disclaims liability for any damages caused by such use of the Programs. Oracle is a registered trademark, and Oracle Expert, Oracle Store, Oracle7, Oracle8, Oracle9i,PL/SQL, SQL*Net, SQL*Plus, and iSQL*Plus are trademarks or registered trademarks of Oracle Corporation. Other names may be trademarks of their respective owners. iii Contents Send Us Your Comments xix Preface xxi Audience xxii Organization xxii Related Documentation xxvi Conventions xxvii Documentation Accessibility xxix What’s New in Oracle Performance? xxxi Part I Writing and Tuning SQL 1 Introduction to the Optimizer Overview of SQL Processing Architecture 1-2 Overview of the Optimizer 1-3 Steps in Optimizer Operations 1-4 Understanding Execution Plans 1-5 Choosing an Optimizer Approach and Goal 1-10 How the CBO Optimizes SQL Statements for Fast Response 1-14 Features that Require the CBO 1-15 Understanding the CBO 1-16 Architecture of the CBO 1-17 Understanding Access Paths for the CBO 1-24 iv Full Table Scans 1-25 Sample Table Scans 1-29 Rowid Scans 1-29 Index Scans 1-30 Cluster Scans 1-41 Hash Scans 1-41 How the CBO Chooses an Access Path 1-41 Understanding Joins 1-44 How the CBO Executes Join Statements 1-44 How the CBO Chooses the Join Method 1-45 Nested Loop Joins 1-46 Nested Loop Outer Joins 1-50 Hash Joins 1-51 Hash Join Outer Joins 1-54 Sort Merge Joins 1-56 Sort Merge Outer Joins 1-59 Cartesian Joins 1-60 Full Outer Joins 1-65 How the CBO Chooses Execution Plans for Joins 1-66 How the CBO Executes Antijoins 1-67 How the CBO Executes Semijoins 1-67 How the CBO Executes Star Queries 1-68 Setting Cost-Based Optimizer Parameters 1-68 Enabling CBO Features 1-69 Controlling the Behavior of the CBO 1-71 Overview of the Extensible Optimizer 1-74 Understanding User-Defined Statistics 1-75 Understanding User-Defined Selectivity 1-76 Understanding User-Defined Costs 1-76 2 Optimizer Operations How the Optimizer Performs Operations 2-2 How the CBO Evaluates IN-List Iterators 2-3 How the CBO Evaluates Concatenation 2-6 How the CBO Evaluates Remote Operations 2-10 v How the CBO Executes Distributed Statements 2-13 How the CBO Executes Sort Operations 2-14 How the CBO Executes Views 2-18 How the CBO Evaluates Constants 2-19 How the CBO Evaluates the UNION and UNION ALL Operators 2-20 How the CBO Evaluates the LIKE Operator 2-22 How the CBO Evaluates the IN Operator 2-22 How the CBO Evaluates the ANY or SOME Operator 2-22 How the CBO Evaluates the ALL Operator 2-23 How the CBO Evaluates the BETWEEN Operator 2-24 How the CBO Evaluates the NOT Operator 2-24 How the CBO Evaluates Transitivity 2-25 How the CBO Optimizes Common Subexpressions 2-26 How the CBO Evaluates DETERMINISTIC Functions 2-29 How the Optimizer Transforms SQL Statements 2-30 How the CBO Transforms ORs into Compound Queries 2-30 How the CBO Unnests Subqueries 2-34 How the CBO Merges Views 2-36 How the CBO Pushes Predicates 2-39 How the CBO Executes Compound Queries 2-49 3 Gathering Optimizer Statistics Understanding Statistics 3-2 Generating Statistics 3-3 Using the DBMS_STATS Package 3-5 Using the ANALYZE Statement 3-13 Finding Data Distribution 3-13 Missing Statistics 3-13 Using Statistics 3-14 Managing Statistics 3-14 Verifying Table Statistics 3-16 Verifying Index Statistics 3-17 Verifying Column Statistics 3-18 Using Histograms 3-20 When to Use Histograms 3-21 vi Creating Histograms 3-21 Types of Histograms 3-22 Viewing Histograms 3-24 Verifying Histogram Statistics 3-24 4 Understanding Indexes and Clusters Understanding Indexes 4-2 Tuning the Logical Structure 4-2 Choosing Columns and Expressions to Index 4-3 Choosing Composite Indexes 4-4 Writing Statements That Use Indexes 4-6 Writing Statements That Avoid Using Indexes 4-6 Re-creating Indexes 4-7 Compacting Indexes 4-7 Using Nonunique Indexes to Enforce Uniqueness 4-8 Using Enabled Novalidated Constraints 4-8 Using Function-based Indexes 4-10 Using Index-Organized Tables 4-12 Using Bitmap Indexes 4-12 When to Use Bitmap Indexes 4-12 Using Bitmap Indexes with Good Performance 4-15 Initialization Parameters for Bitmap Indexing 4-17 Using Bitmap Access Plans on Regular B-tree Indexes 4-17 Bitmap Index Restrictions 4-18 Using Bitmap Join Indexes 4-19 Using Domain Indexes 4-19 Using Clusters 4-20 Using Hash Clusters 4-21 5 Optimizer Hints Understanding Optimizer Hints 5-2 Specifying Hints 5-3 Using Optimizer Hints 5-6 Hints for Optimization Approaches and Goals 5-6 Hints for Access Paths 5-10 vii Hints for Query Transformations 5-18 Hints for Join Orders 5-23 Hints for Join Operations 5-25 Hints for Parallel Execution 5-29 Additional Hints 5-34 Using Hints with Views 5-42 6 Optimizing SQL Statements Goals for Tuning 6-2 Reduce the Workload 6-2 Balance the Workload 6-2 Parallelize the Workload 6-3 Identifying and Gathering Data on Resource-Intensive SQL 6-3 Identifying Resource-Intensive SQL 6-3 Gathering Data on the SQL Identified 6-5 Dynamic Sampling 6-6 When to Use Dynamic Sampling 6-6 How to Use Dynamic Sampling to Improve Performance 6-6 Overview of SQL Statement Tuning 6-7 Verifying Optimizer Statistics 6-8 Reviewing the Execution Plan 6-8 Restructuring the SQL Statements 6-9 Controlling the Access Path and Join Order with Hints 6-18 Restructuring the Indexes 6-22 Modifying or Disabling Triggers and Constraints 6-22 Restructuring the Data 6-22 Maintaining Execution Plans Over Time 6-23 Visiting Data as Few Times as Possible 6-23 7 Using Plan Stability Using Plan Stability to Preserve Execution Plans 7-2 Using Hints with Plan Stability 7-2 Storing Outlines 7-4 Enabling Plan Stability 7-4 Using Supplied Packages to Manage Stored Outlines 7-4 viii Creating Outlines 7-4 Using and Editing Stored Outlines 7-6 Viewing Outline Data 7-9 Moving Outline Tables 7-9 Using Plan Stability with the Cost-Based Optimizer 7-11 Using Outlines to Move to the Cost-Based Optimizer 7-11 Upgrading and the Cost-Based Optimizer 7-12 8 Using the Rule-Based Optimizer Overview of the Rule-Based Optimizer (RBO) 8-2 Understanding Access Paths for the RBO 8-2 Choosing Execution Plans for Joins with the RBO 8-15 Transforming and Optimizing Statements with the RBO 8-17 Transforming ORs into Compound Queries with the RBO 8-17 Using Alternative SQL Syntax 8-20 Part II SQL-Related Performance Tools 9 Using EXPLAIN PLAN Understanding EXPLAIN PLAN 9-2 How Execution Plans Can Change 9-2 Minimizing Throw-Away 9-3 Looking Beyond Execution Plans 9-4 Creating the PLAN_TABLE Output Table 9-4 Running EXPLAIN PLAN 9-5 Identifying Statements for EXPLAIN PLAN 9-5 Specifying Different Tables for EXPLAIN PLAN 9-5 Displaying PLAN_TABLE Output 9-6 Reading EXPLAIN PLAN Output 9-7 Viewing Bitmap Indexes with EXPLAIN PLAN 9-10 Viewing Partitioned Objects with EXPLAIN PLAN 9-11 Examples of Displaying Range and Hash Partitioning with EXPLAIN PLAN 9-12 Examples of Pruning Information with Composite Partitioned Objects 9-14 Examples of Partial Partition-wise Joins 9-16 ix Examples of Full Partition-wise Joins 9-17 Examples of INLIST ITERATOR and EXPLAIN PLAN 9-18 Example of Domain Indexes and EXPLAIN PLAN 9-19 Viewing Parallel Execution with EXPLAIN PLAN 9-20 CPU Costing Model 9-21 EXPLAIN PLAN Restrictions 9-22 PLAN_TABLE Columns 9-23 10 Using SQL Trace and TKPROF Understanding SQL Trace and TKPROF 10-2 Understanding the SQL Trace Facility 10-2 Understanding TKPROF 10-3 Using the SQL Trace Facility and TKPROF 10-3 Step 1: Setting Initialization Parameters for Trace File Management 10-4 Step 2: Enabling the SQL Trace Facility 10-6 Step 3: Formatting Trace Files with TKPROF 10-7 Step 4: Interpreting TKPROF Output 10-12 Step 5: Storing SQL Trace Facility Statistics 10-17 Avoiding Pitfalls in TKPROF Interpretation 10-20 Avoiding the Argument Trap 10-20 Avoiding the Read Consistency Trap 10-20 Avoiding the Schema Trap 10-21 Avoiding the Time Trap 10-22 Avoiding the Trigger Trap 10-23 Sample TKPROF Output 10-24 Sample TKPROF Header 10-24 Sample TKPROF Body 10-24 Sample TKPROF Summary 10-31 11 Using Autotrace in SQL*Plus Controlling the Autotrace Report 11-2 Execution Plan 11-3 Statistics 11-4 Tracing Parallel and Distributed Queries 11-8 SET Variables Influencing SQL*Plus Performance 11-11 x iSQL*Plus Server Statistics 11-12 Interpreting Active Statistics 11-15 Monitoring Disk Reads and Buffer Gets 11-16 12 Using Oracle Trace Overview of Oracle Trace 12-2 Event Data 12-2 Event Sets 12-2 Accessing Collected Data 12-3 Collecting Oracle Trace Data 12-3 Using the Oracle Trace Command-Line Interface 12-3 Using Initialization Parameters to Control Oracle Trace 12-7 Controlling Oracle Trace Collections from PL/SQL 12-10 Accessing Oracle Trace Collection Results 12-12 Formatting Oracle Trace Data to Oracle Tables 12-13 Running the Oracle Trace Reporting Utility 12-14 Oracle Server Events 12-15 Data Items Collected for Events 12-16 Items Associated with Each Event 12-22 Troubleshooting Oracle Trace 12-32 Oracle Trace Configuration 12-33 Formatter Tables 12-37 Part III Creating a Database for Good Performance 13 Building a Database for Performance Initial Database Creation 13-2 Database Creation Using the Installer 13-2 Manual Database Creation 13-2 Parameters Necessary for Initial Database Creation 13-2 The CREATE DATABASE Statement 13-3 Running Data Dictionary Scripts 13-4 Sizing Redo Log Files 13-5 Creating Subsequent Tablespaces 13-6 [...]... read Oracle9 i Database Performance Planning, Oracle9 i Database Concepts, the Oracle9 i Application Developer’s Guide - Fundamentals, and the Oracle9 i Database Administrator’s Guide For more information about Oracle Enterprise Manager and its optional applications, see Oracle Enterprise Manager Concepts Guide, Oracle Enterprise Manager Administrator’s Guide, and Database Tuning with the Oracle Tuning. .. includes performance- related reference information Before using this performance tuning reference, make sure you have read Oracle9 i Database Performance Planning Oracle Corporation has designed a new performance methodology, based on years of Oracle designing and performance experience This brief book explains clear and simple activities that can dramatically improve system performance It discusses the... overall effort to optimize server performance Before using this performance tuning reference, make sure you have read Oracle9 i Database Performance Planning Oracle Corporation has designed a new performance methodology, based on years of Oracle designing and performance experience This brief book explains clear and simple activities that can dramatically improve system performance It discusses the following... number, and (optionally) electronic mail address If you have problems with the software, please contact your local Oracle Support Services xix xx Preface This book describes detailed ways to enhance Oracle performance by writing and tuning SQL properly, using performance tools, and optimizing instance performance It also explains how to create an initial database for good performance and includes performance- related... 12, "Using Oracle Trace" This chapter provides an overview of Oracle Trace usage and describes the Oracle Trace initialization parameters Oracle Trace will be deprecated in a future release Oracle Corporation strongly advises the use of SQL Trace and TKPROF instead Note: Part III, "Creating a Database for Good Performance" This section describes how to create and configure a database for good performance. .. various elements of a database system to optimize performance of an Oracle instance Chapter 22, "Instance Tuning" This chapter discusses the method used for performing tuning It also describes Oracle statistics and wait events Chapter 23, "Tuning Networks" This chapter describes different connection models and networking issues that affect tuning Part VI, "Performance- Related Reference Information"... Testing, Modeling, and Implementation I Deploying New Applications This preface contains these topics: I Audience I Organization I Related Documentation I Conventions I Documentation Accessibility xxi Audience Oracle9 i Database Performance Tuning Guide and Reference is an aid for people responsible for the operation, maintenance, and performance of Oracle This could be useful for database administrators,... 24-43 24-44 24-44 24-50 24-52 24-56 24-59 24-60 24-60 24-66 24-68 24-69 Schemas Used in Performance Examples Glossary Index xvii xviii Send Us Your Comments Oracle9 i Database Performance Tuning Guide and Reference, Release 2 (9.2) Part No A96533-01 Oracle Corporation welcomes your comments and suggestions on the quality and usefulness of this document Your input is an important part of the information used... monospace executables and sample user-supplied (fixed-width font) elements Such elements include computer and database names, net service names, and connect identifiers, as well as user-supplied database objects and structures, column names, packages and classes, user names and roles, program units, and parameter values Example Enter sqlplus to open SQL*Plus The department_id, department_name, and location_id... Optimizing Instance Performance Instance Tuning Performance Tuning Principles Baselines The Symptoms and the Problems When to Tune Performance Tuning Steps Define the Problem Examine the Host System Examine the Oracle Statistics Implement and Measure Change Interpreting Oracle Statistics . Oracle9i Database Performance Tuning Guide and Reference Release 2 (9.2) March 2002 Part No. A96533-01 Oracle9i Database Performance Tuning Guide and Reference, Release 2 (9.2) Part. 12-37 Part III Creating a Database for Good Performance 13 Building a Database for Performance Initial Database Creation 13-2 Database Creation Using the Installer 13-2 Manual Database Creation 13-2 Parameters. V Optimizing Instance Performance 22 Instance Tuning Performance Tuning Principles 22-2 Baselines 22-2 The Symptoms and the Problems 22-3 When to Tune 22-4 Performance Tuning Steps 22-5 Define