OracleDatabase Performance Tuning Recipes - GBV · AnalyzingWait Events 151 5-4. ... Analyzing an...
Transcript of OracleDatabase Performance Tuning Recipes - GBV · AnalyzingWait Events 151 5-4. ... Analyzing an...
Contents
About the Authors xvi
About the Technical Reviewer xvii
Acknowledgments 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
IB CONTENTS
. Chapter 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 Preferences for Statistics Collection 451
13-4. Manually Generating 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