7
Contents at a Glance PART I Core Ideas and Elements of PL/SQL Performance Tuning 1 The Role of PL/SQL in Contemporary Development ..................... 3 2 DBA/Developer Borderline: Tools and Features ........................ 17 3 Code Instrumentation in PL/SQL ................................... 47 PART II Linking SQL and PL/SQL 4 Expanding the SQL Horizons ...................................... 67 5 Thinking in Sets ............................................... 103 6 Pulling the Trigger ............................................. 131 PART III Tuner’s Toolkit 7 Going Beyond Scalar Datatypes .................................. 155 8 Keeping the Cache ............................................. 185 9 Shooting at a Moving Target ..................................... 209 vii

Contents at a Glance€¦ · Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0 Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques

  • Upload
    others

  • View
    22

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Contents at a Glance€¦ · Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0 Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques

Contents at a Glance

PART ICore Ideas and Elements of PL/SQL Performance Tuning

1 The Role of PL/SQL in Contemporary Development . . . . . . . . . . . . . . . . . . . . . 3

2 DBA/Developer Borderline: Tools and Features . . . . . . . . . . . . . . . . . . . . . . . . 17

3 Code Instrumentation in PL/SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

PART IILinking SQL and PL/SQL

4 Expanding the SQL Horizons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

5 Thinking in Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

6 Pulling the Trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

PART IIITuner’s Toolkit

7 Going Beyond Scalar Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

8 Keeping the Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

9 Shooting at a Moving Target . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0

vii

00-FM.indd 7 24/06/14 2:49 PM

Page 2: Contents at a Glance€¦ · Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0 Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques

Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0 Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0

viii Oracle PL/SQL Performance Tuning Tips & Techniques

PART IVPL/SQL in Daily Life

10 Tales from the Trenches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

11 Code Management in Real-World Systems . . . . . . . . . . . . . . . . . . . . . . . 251

12 Extra Tips, Tricks, and Ideas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

00-FM.indd 8 24/06/14 2:49 PM

Page 3: Contents at a Glance€¦ · Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0 Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques

Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0 Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0

Contents

Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvAcknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xixIntroduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii

PART ICore Ideas and Elements of PL/SQL Performance Tuning

1 The Role of PL/SQL in Contemporary Development . . . . . . . . . . . . . . . . . . 3Typical Web Application Process Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Web Application Performance Problem Areas . . . . . . . . . . . . . . . . . . . . . . . 5

Step 1: Client Machine Performance Problems . . . . . . . . . . . . . . . . . 5Step 2: Client Machine to Application

Server Transmission Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Step 3: Application Server Performance Problems . . . . . . . . . . . . . . . 6Step 4: Application Server to Database Transmission Problems . . . . . 6Step 5: Database Performance Problems . . . . . . . . . . . . . . . . . . . . . . 7Step 6: Database to Application

Server Transmission Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7Step 7: Application Server Processing Performance Problems . . . . . . 8Step 8: Application Server to Client

Machine Transmission Problems . . . . . . . . . . . . . . . . . . . . . . . . . . 8Step 9: Client Machine Performance Problems . . . . . . . . . . . . . . . . . 8

Finding the Cause of Slowly Performing Web Applications . . . . . . . . . . . . . . 8Using Timers to Gather Data About Performance . . . . . . . . . . . . . . . . 9Measuring Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Solving Web Application Performance Problems . . . . . . . . . . . . . . . . . . . . . 13Solving Client Machine Performance Problems (Steps 1 and 9) . . . . . 13Resolving Performance Issues Between the Client Machine

and Application Server (Step 2) . . . . . . . . . . . . . . . . . . . . . . . . . . . 13Solving Performance Problems in

the Application Server (Steps 3 and 7) . . . . . . . . . . . . . . . . . . . . . . 13

ix

00-FM.indd 9 24/06/14 2:49 PM

Page 4: Contents at a Glance€¦ · Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0 Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques

Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0 Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0

x Oracle PL/SQL Performance Tuning Tips & Techniques

Solving Performance Problems in the Client Machine (Step 9) . . . . . . 13Lessons Learned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2 DBA/Developer Borderline: Tools and Features . . . . . . . . . . . . . . . . . . . . . . 17Data Dictionary Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Oracle Logging and Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

Logging Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22Tracing Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23Logging/Tracing Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

PL/SQL Hierarchical Profiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27RUNSTATS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32PL/SQL Environment Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

PLSQL_OPTIMIZE_LEVEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34PLSQL_CODE_TYPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36PLSQL_WARNINGS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38PLSQL_CCFLAGS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

PL/Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

3 Code Instrumentation in PL/SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47Is the Problem Really in the Database? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48Application Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

Built-in Code Navigation APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50User-Driven Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

Code Instrumentation Best Practices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58Placing Process Markers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60Placing Error Markers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

PART IILinking SQL and PL/SQL

4 Expanding the SQL Horizons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67Stepping Outside the SQL Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

Making Life Simpler by Switching to PL/SQL . . . . . . . . . . . . . . . . . . . 69Using PL/SQL to Fill Functionality Gaps . . . . . . . . . . . . . . . . . . . . . . 73

Calling Functions Within SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78Single-Table Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78Multi-Table Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

PL/SQL-Related Statistics and Their Impact on Execution Plans . . . . . . . . . . 83Hardware Costs of PL/SQL Functions . . . . . . . . . . . . . . . . . . . . . . . . 84Cardinality of PL/SQL Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91Selectivity of PL/SQL Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

00-FM.indd 10 24/06/14 2:49 PM

Page 5: Contents at a Glance€¦ · Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0 Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques

Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0 Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0

Contents xi

Oracle Database 12c–Only Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97PRAGMA UDF Clause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98Adding Functions Inside the WITH Clause . . . . . . . . . . . . . . . . . . . . 99

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

5 Thinking in Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103Cursors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104Loading Sets from SQL to PL/SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

Oracle Database 12c: Implicit Pagination vs. Continuous Fetch . . . . 112Merging Sets Using PL/SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

“…And Justice FORALL!” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119Staying Up to Date with Syntax: Sparse Collections . . . . . . . . . . . . . . 121Direct Inserts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124FORALL and Table Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

6 Pulling the Trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131DML Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

Data Protection: Constraints vs. Triggers . . . . . . . . . . . . . . . . . . . . . . 133Default Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136Cost of Denormalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

INSTEAD OF Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143Basic DML Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143Dangers of Logical Primary Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146Handling UPDATE Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

PART IIITuner’s Toolkit

7 Going Beyond Scalar Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155Managing LOBs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

Access to LOBs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157Storage Mechanisms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158I/O Tuning Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161SecureFile-Only Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

Managing XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172Storing XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173Manipulating XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

8 Keeping the Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185Built-in Caching Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

Deterministic Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186Scalar Subquery Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191PL/SQL Function Result Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

00-FM.indd 11 24/06/14 2:49 PM

Page 6: Contents at a Glance€¦ · Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0 Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques

Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0 Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0

xii Oracle PL/SQL Performance Tuning Tips & Techniques

Manual Caching Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203PL/SQL Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203Oracle Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

9 Shooting at a Moving Target . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209Expanding the Knowledge Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

CLOB Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211Cursor Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212PL/SQL Function Result Cache Integration . . . . . . . . . . . . . . . . . . . . . 213Support for Complex Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

Digging Deeper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218More About Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218IN-LIST Trap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

Challenging Dynamic SQL Myths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223Myth #1: Dynamic SQL Is Always a Security Risk . . . . . . . . . . . . . . . 224Myth #2: Dynamic SQL Is Always Slower Than Regular SQL . . . . . . . 225Myth #3: Dynamic SQL Always Causes Parsing . . . . . . . . . . . . . . . . . 226Myth #4: DDL Statements Are Only for DBAs . . . . . . . . . . . . . . . . . . 228

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

PART IVPL/SQL in Daily Life

10 Tales from the Trenches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233Third-Party Wrapped Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234Stateless Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237Unknown UNDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240The Curse of Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244

Recursion and Cursors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245Recursion and Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

11 Code Management in Real-World Systems . . . . . . . . . . . . . . . . . . . . . . . . . 251The Problem of Code Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252

Versioning “Lite” for DBAs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253Homegrown Versioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256

Edition-Based Redefinition and Performance Tuning . . . . . . . . . . . . . . . . . . . 260Understanding Edition-Based Redefinition . . . . . . . . . . . . . . . . . . . . 261Important Changes to EBR Introduced in Oracle Database 12c . . . . . 262

System Environment Differences and Performance-Related Code Management . . . . . . . . . . . . . . . . . . . . . . . . . 266

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

00-FM.indd 12 24/06/14 2:49 PM

Page 7: Contents at a Glance€¦ · Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0 Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques

Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0 Oracle-Regular / Oracle PL/SQL Performance Tuning Tips & Techniques / Rosenblum / 482-0

Contents xiii

12 Extra Tips, Tricks, and Ideas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271Back to Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

VARCHAR2 Memory Allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272The Cost of Current Date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274BINARY Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

Text Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277Checking Text Strings for Valid Characters . . . . . . . . . . . . . . . . . . . . . 278Similarity of Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280VARCHAR2 and Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

Increasing Processing Complexity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284NOCACHE Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284ACCESSIBLE BY Clause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286More About Pipelined Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

00-FM.indd 13 24/06/14 2:49 PM