SQL Tuning for Smarties, Dummies and Everyone in Between
Novices J agan Athreya Director, Database Manageability, Oracle Arup Nanda 2 Senior Director, Database Architecture, Starwood Hotels and Resorts The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development release and timing of any The development, release, and timing of any features or functionality described for Oracles products remains at the sole discretion of Oracle. 3 Outline SQL Tuning Challenges g g SQL Tuning Solutions New Feature Overview Problem Root Causes and their Solutions Preventing SQL Problems Q & A 4 SQL Tuning Challenges Real-world DBA and Development Teams Real-world DBA and Development Teams DBA team Mostly average, some superstars Superstars take most of the burden over-stretched Development staff Mostly non-Oracle skills J ava, C++ y , Usually considers the DB as a black box Writing efficient queries, troubleshooting performance issues is delegated to DBAs is delegated to DBAs 5 SQL Tuning Challenges Production Performance Production Performance Situation: Query from hell pops up Brings the database to its knees DBA is blamed for the failure DBA is blamed for the failure Response DBA: Developer should be taking care of this. Developer: Why is the DBA not aware of this problem? Manager: DBA will review all queries and approve them. Challenge Challenge What is the most efficient way to manage this process? 6 SQL Tuning Challenges Change Causing Problems Change Causing Problems Situation New SQL statements added as part of application patch deployment Database upgrades Database upgrades Database patching Response Users: How will the application perform after the changes? DBA: How do I ensure that our SLA remains intact after the changes are rolled out? Challenge How to reduce business risk while absorbing new technologies? 7 technologies? SQL Tuning Challenges Optimizer Statistics Management Optimizer Statistics Management Situation Data in Production has evolved over time. Have the optimizer statistics stayed current? Response Response DBA: Will statistics refresh break something? What will happen if we dont collect? How often should I collect the statistics ? What happens when you collect a new set? pp y Challenge What is the recommended strategy for managing optimizer statistics to ensure the best performance? 8 statistics to ensure the best performance? SQL Tuning Challenges Bad Plans Diagnosis and Resolution Bad Plans Diagnosis and Resolution No time to find the root cause. How to prevent this from recurring? Bind variables: How do you prevent bad plans based on choice of bind variables? on choice of bind variables? How to diagnose a bad plan 10053 trace, endless pouring over traces , p g Wrongly constructed predicates How to fix a bad plan Hi t ? h f d ? Hints? change of code? Baselines vs. SQL Profiles Pick out a single SQL or a bunch from the shared pool 9 Outline SQL Tuning Challenges g g SQL Tuning Solutions New Feature Overview Problem Root Causes and their Solutions Preventing SQL Problems Q & A 10 Real-Time SQL Monitoring Looking Inside SQL Execution Automatically monitors long running SQL g Enabled out-of-the-box with no performance overhead Monitors each SQL execution Exposes monitoring statistics p g Global execution level Plan operation level Parallel Execution level Guides tuning efforts 11 New capabilities in SQL Monitoring New in Oracle Database 11g Release 2 g PL/SQL monitoring including associated high load SQL monitored recursively Exadata aware I/O performance monitoring and associated metric data p g Capture rich metadata such as bind values, session details e.g. user, program, client_id and error codes and error messages Save as Active Report for rich interactive offline analysis 12 DEMO 13 Application Tuning Automatic SQL Tuning Automatic SQL Tuning High-Load Packaged Apps + SQL Profile C t i bl A Well-Tuned SQL Customizable Apps + SQL Advice Customizable Apps + Indexes & MVs + Partitions Applications Automatic Tuning Optimizer Automatic SQL Tuning Identifies high-load SQL from AWR Tunes SQL using SQL Profiles g Implements greatly improved SQL plans (optional) Performance benefit of advice provided SQL Profiling tunes execution plan without changing SQL text 14 Enables transparent tuning for packaged applications Automatic SQL Tuning New in Oracle Database 11g Release 2 New in Oracle Database 11g Release 2 Gather Missing or Stale Statistics C t SQL P fil SQL Profiling Statistics Analysis Access Path Analysis SQL Restructure Analysis Create a SQL Profile Add Missing Access Structures Modify SQL Constructs Adopt Alternati e Alternative Plan Analysis Parallel Query Analysis Automatic Tuning Administrator Comprehensive Adopt Alternative Execution Plan Create Parallel SQL Profile SQL Tuning Advisor SQL Tuning Advisor NEW: Identifies alternate execution plans using real-time and historical Automatic Tuning Optimizer SQL Tuning Recommendations NEW: Identifies alternate execution plans using real time and historical performance data NEW: Recommends parallel profile if it will improve SQL performance significantly (2x or more) 15 SQL Tuning for Developers Integration with Visual Studio Introduced in Oracle Developer Tools for Visual Studio Release 11.1.0.7.20 Oracle Performance Analyzer Tune running applications with the help of ADDM Query Window Tune individual SQL statements with STA Server Explorer ManageAWR snapshots andADDMtasks Manage AWR snapshots and ADDM tasks 16 Agenda SQL Tuning Challenges g g SQL Tuning Solutions New Feature Overview Problem Root Causes and their Solutions Preventing SQL Problems Q & A 17 What makes SQL go bad? Root Causes of Poor SQL Performance 1. Optimizer statistics issues a. Stale/Missing statistics b. Incomplete statistics c. Improper optimizer configuration d. Upgraded database: new optimizer pg p e. Changing statistics f. Rapidly changing data 2. Application Issues Mi i t t a. Missing access structures b. Poorly written SQL statements 3. Cursor sharing issues a. Bind-sensitive SQL with bind peeking p g b. Literal usage 4. Resource and contention issues a. Hardware resource crunch b C t ti ( l k t ti bl k d t t ti ) b. Contention (row lock contention, block update contention) c. Data fragmentation 5. Parallelism issues a. Not parallelized (no scaling to large data) 18 p ( g g ) b. Improperly parallelized (partially parallelized, skews) What makes SQL go bad? Root Causes of Poor SQL Performance 1. Optimizer statistics issues a. Stale/Missing statistics b. Incomplete statistics c. Improper optimizer configuration d. Upgraded database: new optimizer e. Changing statistics g g f. Rapidly changing data 2. Application Issues 3. Cursor sharingissues 4. Resource and contention issues 5. Parallelism issues 19 Oracle Optimizer Statistics Inaccurate statistics Suboptimal Plans Optimizer Statistics CBO Optimizer Statistics Table Statistics CBO Column Statistics I d S i i Index Statistics Partition Statistics Partition Statistics SystemStatistics 20 System Statistics Oracle Optimizer Statistics Preventing SQL Regressions Novice Mode Automatic Statistics Collection J ob (stale or missing) g) Out-of-the box, runs in maintenance window Configuration can be changed (at table level) G th t ti ti d di ti Gathers statistics on user and dictionary objects Uses new collection algorithm with accuracy of compute and speed faster than Nightly accuracy of compute and speed faster than sampling of 10% Incrementally maintains statistics for partitioned tables very efficient partitioned tables very efficient Set DBMS_STATS.SET_GLOBAL_PREFS 21 Oracle Optimizer Statistics Preventing SQL Regressions Expert Mode Extended Statistics Extended Optimizer Statistics provides a mechanism to collect statistics on a group of related columns: Function-Based Statistics Multi-Column Statistics Full integration into existing statistics framework Full integration into existing statistics framework Automatically maintained with column statistics DBMS_STATS. CREATE_EXTENDED_STATS Pending Statistics Pending Statistics Allows validation of statistics before publishing Disabled by default To enable, set table/schema PUBLISH setting to FALSE , g DBMS_STATS. SET_TABLE_PREFS( ' SH' , ' CUSTOMERS' , ' PUBLI SH' , ' f al se' ) To use for validation ALTER SESSI ON SET opt i mi zer _pendi ng_st at i st i cs = TRUE; 22 Publish after successful verification What makes SQL go bad? Root Causes of Poor SQL Performance 1. Optimizer statistics issues 2. Application Issues a Missing access structures a. Missing access structures b. Poorly written SQL statements 3. Cursor sharingissues 4 Resource and contention issues 4. Resource and contention issues 5. Parallelism issues 23 Identify performance problems using ADDM Automatic Database Diagnostic Monitor Novice M d Provides database and cluster-wide performance Mode cluster-wide performance diagnostic Throughput centric - Focus on reducing time DB time g Identifies top SQL: Shows SQL impact Frequency of occurrence Pinpoints root cause: SQL stmts waiting for RowLock waits Row Lock waits SQL stmts not shared 24 Identify High Load SQL Using Top Activity Novice M d Performance Page Identify Top SQL by DB Time: CPU Mode I/O Non-idle waits Different Levels of Analysis y Historical analysis AWR data Performance Page Top Activity g Real-time analysis ASH data More granular analysis g y Enables identification of transient problem SQL Top Activity Page 25 Tune using SQL Tuning Advisor Advanced SQL Tuning Universe of Access Structures Novice+ Mode Indexes: B-tree indexes, B-tree cluster indexes, Hash cluster indexes, Global and local indexes, Reverse key indexes, Bitmap indexes, Function-based indexes, Domain indexes Materialized Views: Primary Key materialized views, Object materialized views Object materialized views ROWID materialized views Complex materialized views Partitioned Tables: Range partitioning, Hash partitioning, List partitioning, Composite partitioning, Interval Partitioning REF partitioning Interval Partitioning, REF partitioning, Virtual Column Based partitioning B-tree index 26 SQL Access Advisor: Partition Advisor Novice+ Mode Indexes Materialized views SQL Access Advisor Representative Workload Materialized views logs Automatic Tuning Optimizer Access Path Partitioned objects Access Path Analysis objects 27 SQL Access Advisor Advanced Options Expert Mode Workload filtering Limited vs. advanced mode Tablespaces for access structures Tablespaces for access structures Hypothetical workload tuning Factoring in the cost of creation Space limitations for indexes and MVs Space limitations for indexes and MVs 28 1 O ti i t ti ti i What makes SQL go bad? Root Causes of Poor SQL Performance 1. Optimizer statistics issues 2. Application Issues 3. Cursor sharing issues a Literal usage a. Literal usage b. Bind-sensitive SQL with bind peeking 4. Resource and contention issues 5. Parallelismissues 5. Parallelism issues 29 What makes SQL go bad? a. Literal Usage Issue Expert Mode SELECT * FROM jobs WHERE min_salary > 12000; SELECT * FROM jobs WHERE min_salary > 15000; SELECT * FROM jobs WHERE min_salary > 10000; SELECT * FROM SELECT * FROM SELECT * FROM cursor_sharing ={exact, force, similar} SELECT FROM Sh i Library Cache Sharing Cursors is good! 30 Library Cache What makes SQL go bad? b. Bind Peeking Issue N Mode Processed_Flag Y Y Full Table Scan Y Y Y CBO 10g FTS 99 Two different optimal plans for different bind values Index Range Scan N IRS 1 31 Problem: Binds will affect optimality in any subsequent uses of the stored plan Fixing problems with Adaptive Cursor Sharing Adaptive Cursor Sharing Expert Mode SELECT * FROM emp WHERE wage := wage_value Selectivity Ranges: Mode Selectivity Ranges: 1 2 20 25 Same Plan 3 22 24 Different Plan 4 30 35 Same Plan, Expand Interval 32 34 43 Interval Agenda SQL Tuning Challenges g g SQL Tuning Solutions New Feature Overview Problem Root Causes and their Solutions Preventing SQL Problems Q & A 33 Preventing problems with SQL Plan Management Problem: changes in the environment cause plans to change NL GB Parse Plan baseline is established NL NL Statement log Plan history SQL statement is parsed again and a different plan is generated HJ GB Plan baseline GB NL NL New plan is not executed but k d f ifi ti HJ marked for verification 34 SQL Plan Management Migration of Stored Outlines to Plan Baselines Oracle Database 11g GB 5. Migrate Stored Outlines into SPM Plan History GB OH Schema GB No plan regressions HJ HJ into SPM HJ HJ HJ GB HJ 4. Upgrade to 11g Oracle Database 11g 1 B i OH Schema HJ GB CREATE_STORED_OUTLINES=true 1. Begin with 2. Run all SQL in the Application and auto t St d O tli Oracle Database 9 or 10g HJ CREATE_STORED_OUTLINES=false create a Stored Outline for each one 3. After Store Outlines are captured 35 captured SQL Performance Analyzer (SPA) Validate statistics refresh with SPA Steps: 1. Capture SQL workload in STS using automatic cursor cache Validating upgrade with SPA SQL Workload using automatic cursor cache capture capability 2. Execute SPA pre-change trial 3. Refresh statistics using PENDING i SQL plans + stats SQL plans + stats Pre change Trial Post change Trial PENDING option 4. Execute SPA post-change trial 5. Run SPA report comparing SQL execution statistics Compare Pre-change Trial Post-change Trial execution statistics Before PUBLISHing stats: Remediate individual few SQL Analysis Report SQL Performance Q for plan regressions: SPM, STA Revert to old statistics if too many regressions observed 36 Conclusion Identify, Resolve, Prevent Prevent SPA SPM 1. Production Performance 2. Change Causing Problems 3. Optimizer Statistics Management 4 B d l Di i d R l ti Resolve 4. Bad plans Diagnosis and Resolution ADDM, Top Activity, SQL Monitoring Resolve Tuning Advisor Identify Tuning Advisor, Access Advisor, Auto Stat Collection Top Activity, ADDM, SQL Monitoring 37 38