Day 1: Introduction to SQL Optimization
1-1 – Introduction to SQL Tuning
Intro to the class History of SQL Evolution of SQL Exercise - declarative SQL
1-2 – Internal processing of SQL statements
Parsing SQL Syntax SQL Semantic Analysis Generating the execution plan Using optimizer plan stability Using the v$sql view Using the v$sql_plan view Exercise – Query the library cache
1-3 – Optimizer Statistics
Purpose of statistics Types of statistics (table, column, system) Histogram statistics Dynamic sampling using dbms_stats Exporting/importing statistics Statistics management Exercise – gather system stats
1-4 – Optimizer modes and goals
Management issues with system-wide optimization Different modes of SQL optimization Bi-modal databases Rule-based optimization Cost-based optimization All rows optimization First_rows optimization Exercise – display and change optimizer_mode 1-5 - Table joining internals Sort-merge joins Nested Loop joins Hash joins STAR joins Bitmap joins Exercise – Change table join techniques & evaluate performance 1-6 – SQL Tuning and full-table scans Basics of file I/O Sequential reads vs. scattered reads When full scans are best RAM caching in the SGA Automating table caching Solid State Disks Tracking full-scans over time with AWR Exercise – Query v$sql
DAY 2 – Execution plan internals
2-1 –Oracle parallel query and parallel DML
Parallel and SMP processing Parallel query optimal degree Parallel query management (system, session, statement) Parallel DML Parallel parallelism Exercise: Run a parallel query
2-2 – Exposing execution plans
Evaluating Large-table, full-table scans Index Usage Analysis Reports on system-wide SQL execution Exercise – run autotrace options 2-3 - Altering SQL execution plans Using hints Changing the system-wide optimizer mode Changing optimizer mode for specific statements Re-writing SQL queries Table join order evaluation Using the ordered hint Exercise – Optimizer costing models
2_4 – Tuning SQL with hints
Optimizer directives Scope of hints (session-level, statement level) Broad hints (optimizer mode) vs. narrow hints Good Hints vs. bad hints Using the ORDERED and LEADING HINTS Forcing index usage Using hints in subqueries Exercise – change an execution plan with a hint
2_5 – Oracle Index Optimization
B-Tree indexes Bitmap Indexes Function-based Indexes Clustered indexes Index-only tables Exercise – Create a function-based index
2_6 – Tuning Oracle sorting
When a sort is invoked (order by, group by, etc.) Sorting with indexes vs internal sorting Detecting disk sorts Sorted Hash Clusters Exercise: Force two sort methods
DAY 3 – Advanced SQL Tuning Topics
3_1 – Monitoring SQL Performance
Measuring end-to-end response time Measuring SQL throughput Using v$session_longops Optional Exercise – Run plan9i.sql
3_2 – Oracle DML Tuning
DML Tuning is not for neophytes Oracle DML tuning Optimizing Oracle SQL insert performance High Impact insert Tuning Techniques Tips for batch inserts Low-impact insert techniques (% and % faster) Tuning insert speed with the nologging option Reverse key indexes and insert performance Blocksize and insert performance Oracle Delete & Update Tuning High impact update techniques (over % faster): Low-impact techniques (between % and % faster) Using bulk binds for PL/SQL updates Oracle subquery factoring (with clause) for DML
3_3 – Tuning with materialized views and temporary objects
Materialized views Global temporary tables Using scalar subqueries (WITH clause) Simplifying complex SQL with temporary objects Exercise – Re-write complex query using temporary tables and WITH clause
3_4 – Tuning subqueries
Subquery Tuning and SQL Types of SQL Subqueries Tuning Guidelines for Subqueries Avoiding SQL Subqueries Subqueries in the where Clause In vs. exists Subqueries Same Results, Different Syntax and Plans Non-correlated subquery: Outer Join: Correlated Subquery: Tuning Scalar Subqueries Scalar Subquery Performance Removing Subqueries for Fast SQL Performance Internals of Temporary Tables Correlated vs. Non-correlated Subqueries Tuning Correlated Subqueries Automatic Rewriting not exists Subqueries Automatic Rewriting exists Subqueries Rewriting Non-equality Correlated Subqueries Rewriting exists Subqueries with the rank Function Subquery Hint Tuning Subquery Tuning with Index Hints Tuning Subqueries With the push_subq Hint Table Anti-Join Hints The merge_aj Hint SQL Tuning With the hash_aj Hint Exercise: Tune an anti-join
3_5 – Troubleshooting bad SQL
Troubleshooting Problem SQL The Holistic Approach to SQL Tuning Troubleshooting Oracle SQL Bugs What is Bad SQL? Identifying Problem SQL Troubleshooting with v$sql_plan SQL Troubleshooting with v$sql_plan_statistics Finding indexing opportunities Exercise: Find top SQL hogs
3_6 – Advanced Optimizer Statistics
Histograms Exporting/importing statistics Statistics management Exercise – Analyze schema and tables