OracleDatabase Performance Tuning Recipes - GBV · AnalyzingWait Events 151 5-4. ... Analyzing an...

12
Oracle Database 11 g Performance Tuning Recipes Sam R. Alapati Darl Kuhn Bill Padfield Apress*

Transcript of OracleDatabase Performance Tuning Recipes - GBV · AnalyzingWait Events 151 5-4. ... Analyzing an...

Oracle Database 11 g

Performance TuningRecipes

Sam R. AlapatiDarl Kuhn

Bill Padfield

Apress*

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