Oracle Database 11 g Performance Tuning Recipes Sam R. Alapati Darl Kuhn Bill Padfield Apress*
Contents About the Authors About the Technical Reviewer Acknowledgments xvi xvii xviii Chapter 1: Optimizing Table Performance 1 1-1. Building a Database That Maximizes Performance 2 1-2. Creating Tablespaces to Maximize Performance 5 1-3. Matching Table Types to Business Requirements 8 1-4. Choosing Table Features for Performance 9 1-5. Avoiding Extent Allocation Delays When Creating Tables 12 1-6. Maximizing Data Loading Speeds 14 1-7. Efficiently Removing Table Data 17 1-8. Displaying Automated Segment Advisor Advice 19 1-9. Manually Generating Segment Advisor Advice 23 1-10. Automatically E-mailing Segment Advisor Output 27 1-11. Rebuilding Rows Spanning Multiple Blocks 28 1-12. Freeing Unused Table Space 32 1-13. Compressing Data for Direct Path Loading 33 1-14. Compressing Data for All DML 36 1-15. Compressing Data at the Column Level 38 1-16. Monitoring Table Usage 40
. Chapter IB CONTENTS 2: Choosing and Optimizing Indexes...,. 43 2-1. Understanding B-tree Indexes 45 2-2. Deciding Which Columns to Index 51 2-3. Creating a Primary Key Index 54 2-4. Creating a Unique Index 56 2-5. Indexing Foreign Key Columns 59 2-6. Deciding When to Use a Concatenated Index 60 2-7. Reducing Index Size Through Compression 63 2-8. Implementing a Function-Based Index 64 2-9. Indexing a Virtual Column 67 2-10. Avoiding Concentrated I/O for Index 68 2-11. Adding an Index Without Impacting Existing Applications 70 2-12. Creating a Bitmap Index in Support of a Star Schema 72 2-13. Creating a Bitmap Join Index 73 2-14. Creating an Index-Organized Table 74 2-15. Monitoring Index Usage 75 2-16. Maximizing Index Creation Speed 77 2-17. Reclaiming Unused Index Space 78 Chapter 3: Optimizing Instance Memory 83 3-1. Automating Memory Management 83 3-2. Managing Multiple Buffer Pools 87 3-3. Setting Minimum Values for Memory 89 3-4. Monitoring Memory Resizing Operations 90 3-5. Optimizing Memory Usage 91 3-6. Tuning PGA Memory Allocation 93 3-7. Configuring the Server Query Cache 95
mcontents 3-8. Managing the Server Result Cache 97 3-9. Caching SQL Query Results 99 3-10. Caching Client Result Sets 103 3-11. Caching PL/SQL Function Results 105 3-12. Configuring the Oracle Database Smart Flash Cache 109 3-13. Tuning the Redo Log Buffer 110 Chapter 4: Monitoring System Performance 113 4-1. Implementing Automatic Workload Repository (AWR) 113 4-2. Modifying the Statistics Interval and Retention Periods 116 4-3. Generating an AWR Report Manually 117 4-4. Generating an AWR Report via Enterprise Manager 120 4-5. Generating an AWR Report for a Single SQL Statement 121 4-6. Creating a Statistical Baseline for Your Database 123 4-7. Managing AWR Baselines via Enterprise Manager 126 4-8. Managing AWR Statistics Repository 129 4-9. Creating AWR Baselines Automatically 131 4-10. Quickly Analyzing AWR Output 133 4-11. Manually Getting Active Session Information 134 4-12. Getting ASH Information from Enterprise Manager 140 4-13. Getting ASH Information from the Data Dictionary 142 Chapter 5: Minimizing System Contention 147 5-1. Understanding Response Time 147 5-2. Identifying SQL Statements with the Most Waits 150 5-3. Analyzing Wait Events 151 5-4. Understanding Wait Class Events 152 5-5. Examining Session Waits 153
CONTENTS 5-6. Examining Wait Events by Class 154 5-7. Resolving Buffer Busy Waits 157 5-8. Resolving Log File Sync Waits 158 5-9. Minimizing read by other session Wait Events 160 5-10. Reducing Direct Path Read Wait Events 161 5-11. Minimizing Recovery Writer Waits 162 5-12. Finding Out Who's Holding a Blocking Lock 163 5-13. Identifying Blocked and Blocking Sessions 165 5-14. Dealing with a Blocking Lock 167 5-15. Identifying a Locked Object 168 5-16. Resolving enq: TM Lock Contention 169 5-17. Identifying Recently Locked Sessions 171 5-18. Analyzing Recent Wait Events in a Database 174 5-19. Identifying Time Spent Waiting Due to Locking 175 5-20. Minimizing Latch Contention 178 5-21. Managing Locks from Oracle Enterprise Manager 181 5-22. Analyzing Waits from Oracle Enterprise Manager 182 Chapter 6: Analyzing Operating System Performance 185 6-1. Detecting Disk Space Issues 187 6-2. Identifying System Bottlenecks (vmstat) 190 6-3. Identifying System Bottlenecks (Solaris) 192 6-4. Identifying Top Server-Consuming Resources (top) 194 6-5. Identifying CPU and Memory Bottlenecks (ps) 197 6-6. Identifying I/O Bottlenecks 198 6-7. Identifying Network-Intensive Processes 201 6-8. Troubleshooting Database Network Connectivity 202 viii
:> CONTENTS 6-9. Mapping a Resource-Intensive Process to a Database Process 204 6-10. Terminating a Resource-Intensive Process 207 Chapter 7: Troubleshooting the Database 209 7-1. Determining the Optimal Undo Retention Period 209 7-2. Finding What's Consuming the Most Undo 213 7-3. Resolving an ORA-01555 Error 215 7-4. Monitoring Temporary Tablespace Usage 217 7-5. Identifying Who Is Using the Temporary Tablespace 218 7-6. Resolving the "Unable to Extend Temp Segment" Error 220 7-7. Resolving Open Cursor Errors 222 7-8. Resolving a Hung Database 224 7-9. Invoking the Automatic Diagnostic Repository Command Interpreter 229 7-10. Viewing an Alert Log from ADRCI 233 7-11. Viewing Incidents with ADRCI 235 7-12. Packaging Incidents for Oracle Support 236 7-13. Running a Database Health Check 238 7-14. Creating a SQL Test Case 240 7-15. Generating an AWR Report 243 7-16. Comparing Database Performance Between Two Periods 246 7-17. Analyzing an AWR Report 248 Chapter 8: Creating Efficient SQL 253 8-1. Retrieving All Rows from a Table 254 8-2. Retrieve a Subset of Rows from a Table 256 8-3. Joining Tables with Corresponding Rows 258 8-4. Joining Tables When Corresponding Rows May Be Missing 259 8-5. Constructing Simple Subqueries 263
% CONTENTS 8-6. Constructing Correlated Subqueries 267 8-7. Comparing Two Tables to Finding Missing Rows 269 8-8. Comparing Two Tables to Finding Matching Rows 271 8-9. Combining Results from Similar SELECT Statements 271 8-10. Searching for a Range of Values 274 8-11. Handling Null Values 277 8-12. Searching for Partial Column Values 280 8-13. Re-using SQL Statements Within the Shared Pool 284 8-14. Avoiding Accidental Full Table Scans 288 8-15. Creating Efficient Temporary Views 290 8-16. Avoiding the NOT Clause 293 8-17. Controlling Transaction Sizes 295 IChapter 9: Manually Tuning SQL 299 9-1. Displaying an Execution Plan for a Query 300 9-2. Customizing Execution Plan Output 302 9-3. Graphically Displaying an Execution Plan 306 9-4. Reading an Execution Plan 307 9-5. Monitoring Long-Running SQL Statements 310 9-6. Identifying Resource-Consuming SQL Statements That Are Currently Executing 311 9-7. Seeing Execution Statistics for Currently Running SQL..312 9-8. Monitoring Progress of a SQL Execution Plan 316 9-9. Identifying Resource-Consuming SQL Statements That Have Executed in the Past 319 9-10. Comparing SQL Performance After a System Change 321 X
= COMTENTS IlChapter 10: Tracing SQL Execution 327 10-1. Preparing Your Environment 327 10-2. Tracing a Specific SQL Statement 330 10.3. Enabling Tracing in Your Own Session 332 10-4. Finding the Trace Files 332 10-5. Examining a Raw SQL Trace File 334 10-6. Analyzing Oracle Trace Files 335 10-7. Formatting Trace Files with TKPROF 336 10-8. Analyzing TKPROF Output 337 10-9. Analyzing Trace Files with Oracle Trace Analyzer 340 10-10. Tracing a Parallel Query 343 10-11. Tracing Specific Parallel Query Processes... 345 10-12. Tracing Parallel Queries in a RAC System 346 10-13. Consolidating Multiple Trace Files 347 10-14. Finding the Correct Session for Tracing 348 10-15. Tracing a SQL Session 349 10-16. Tracing a Session by Process ID 351 10-17. Tracing Multiple Sessions 352 10-18. Tracing an Instance or a Database 353 10-19. Generating an Event 10046 Trace for a Session 354 10-20. Generating an Event 10046 Trace for an Instance 356 10-21. Setting a Trace in a Running Session 356 10-22. Enabling Tracing in a Session After a Login 357 10-23. Tracing the Optimizer's Execution Path 358 10-24. Generating Automatic Oracle Error Traces 361 10-25. Tracing a Background Process 362
CONTENTS 10-26. Enabling Oracle Listener Tracing 363 10-27. Setting Archive Tracing for Data Guard 365 Chapter 11: Automated SQL Tuning 367 11-1. Displaying Automatic SQL Tuning Job Details 370 11-2. Displaying Automatic SQL Tuning Advice 372 11-3. Generating a SQL Script to Implement Automatic Tuning Advice 376 11-4. Modifying Automatic SQL Tuning Features 377 11-5. Disabling and Enabling Automatic SQL Tuning 380 11-6. Modifying Maintenance Window Attributes 381 11-7. Creating a SQL Tuning Set Object 383 11-8. Viewing Resource-Intensive SQL in the AWR 384 11-9. Viewing Resource-Intensive SQL in Memory 386 11-10. Populating SQL Tuning Set from High-Resource SQL in AWR 388 11-11. Populating a SQL Tuning Set from Resource-Consuming SQL in Memory 390 11-12. Populating SQL Tuning Set with All SQL in Memory 391 11-13. Displaying the Contents of a SQL Tuning Set 393 11-14. Selectively Deleting Statements from a SQL Tuning Set 394 11-15. Transporting a SQL Tuning Set 396 11-16. Creating a Tuning Task 398 11-17. Manually Running SQL Tuning Advisor 401 11-18. Getting SQL Tuning Advice from the Automatic Database Diagnostic Monitor..404 Chapter 12: Execution Plan Optimization and Consistency 409 12-1. Creating and Accepting a SQL Profile 413 12-2. Automatically Accepting SQL Profiles 417 12-3. Displaying SQL Profile Information 419 12-4. Disabling a SQL Profile 421 xii
S CONTENTS 12-5. Dropping a SQL Profile 423 12-6. Moving a SQL Profile 424 12-7. Automatically Adding Plan Baselines 426 12-8. Creating a Plan Baseline for One SQL Statement 428 12-9. Creating Plan Baselines for SQL Contained in SQL Tuning Set 431 12-10. Altering a Plan Baseline 433 12-11. Determining If Plan Baselines Exist 436 12-12. Displaying Plan Baseline Execution Plans 437 12-13. Adding a New Plan to Plan Baseline (Evolving) 439 12-14. Disabling Plan Baselines 442 12-15. Removing Plan Baseline Information 443 12-16. Transporting Plan Baselines 444 Chapter 13: Configuring the Optimizer.447 13-1. Choosing an Optimizer Goal 447 13-2. Enabling Automatic Statistics Gathering 448 13-3. Setting 13-4. Manually Generating Preferences for Statistics Collection 451 Statistics 456 13-5. Locking Statistics 458 13-6. Handling Missing Statistics 459 13-7. Exporting Statistics 460 13-8. Restoring Previous Versions of Statistics 462 13-9. Gathering System Statistics 463 13-10. Validating New Statistics 466 13-11. Forcing the Optimizer to Use an Index 468 13-12. Enabling Query Optimizer Features. 470 13-13. Keeping the Database from Creating Histograms 472
CONTENTS 13-14. Improving Performance When Not Using Bind Variables 473 13-15. Understanding Adaptive Cursor Sharing 476 13-16. Creating Statistics on Expressions 482 13-17. Creating Statistics for Related Columns 483 13-18. Automatically Creating Column Groups 484 13-19. Maintaining Statistics on Partitioned Tables 486 13-20. Concurrent Statistics Collection for Large Tables 488 Chapter 14: Implementing Query Hints 491 14-1. Writing a Hint 491 14-2. Changing the Access Path 493 14-3. Changing the Join Order 497 14-4. Changing the Join Method 498 14-5. Changing the Optimizer Version 501 14-6. Choosing Between a Fast Response and Overall Optimization 502 14-7. Performing a Direct-Path Insert 505 14-8. Placing Hints in Views 506 14-9. Caching Query Results 509 14-10. Directing a Distributed Query to a Specific Database 513 14-11. Gathering Extended Query Execution Statistics 517 14-12. Enabling Query Rewrite 519 14-13. Improving Star Schema Query Performance 521 Chapter 15: Executing SQL in Parallel 525 15-1. Enabling Parallelism for a Specific Query 526 15-2. Enabling Parallelism at Object Creation 530 15-3. Enabling Parallelism for an Existing Object 532 15-4. Implementing Parallel DML 533 xiv
CONTENTS 15-5. Creating Tables in Parallel 536 15-6. Creating Indexes in Parallel 538 15-7. Rebuilding Indexes in Parallel 539 15-8. Moving Partitions in Parallel 541 15-9. Splitting Partitions in Parallel 542 15-10. Enabling Automatic Degree of Parallelism 543 15-11. Examining Parallel Explain Plans 545 15-12. Monitoring Parallel Operations 548 15-13. Finding Bottlenecks in Parallel Processes 550 15-14. Getting Detailed Information on Parallel Sessions 552 Index 555 XV