using sql plan management (spm) to balance plan flexibility and plan stability

45
Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability Carlos Sierra

Upload: carlos-sierra

Post on 29-Nov-2014

1.722 views

Category:

Software


1 download

DESCRIPTION

Have you been in a situation where an Execution Plan changes unexpectedly? Have you been asked to "fix" a Plan Stability issue? If you have, then you may have heard of Adaptive Cursor Sharing (ACS) and SQL Plan Baselines. SQL Plan Management (SPM) can be explained as a collection of three functions: SQL Plan Baseline (SPB) creation, Plan selection and Plan Evolution. This session is about understanding all 3 major components of SPM and learning how we can use this technology to input a set of Flexible Plans created by Adaptive Cursor Sharing (ACS) and make them more steady. ACS and SPM actually work really well together. Understanding their complex relationship is key to balance the yin and yang of Plan Flexibility and Plan Stability on an Oracle Database (11g or higher). This Session shows how these duo (ACS and SPM) can do great things if you make them work together as a team. As a Developer or a DBA, if you need to know more about Execution Plan Stability, this session may provide you with some valuable insight. Some tools to transport a Plan from one system to another, or to simply create a SQL Plan Baseline from different sources are also presented.

TRANSCRIPT

Page 1: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Carlos Sierra

Page 2: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 2

Carlos Sierra• SQLTXPLAIN + SQL Health-Check SQLHC +• Consultant/Developer/DBA/Design/+• Oracle Performance + SQL Tuning• Oracle Database Health-Check• Tools + Scripts• Speaker

QuestionEverything

Page 3: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 3

Topics• Motivation• SQL Plan Management (SPM)– Mechanics– Demos

Page 4: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 4

Plan Flexibility• Cost-based Optimizer (CBO)– Introduced in Oracle 7– Computes an Optimal Plan based on • Heuristics• Query Predicates• Schema Object Statistics• Several Others

Page 5: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 5

Flexibility: Good or Evil?• CBO Mission– Compute an Optimal Plan for a given SQL and its Data

• Plans have many and complex Dependencies• CBO Performance– Successful most of the times• Produces a sub-optimal Plan sometimes

Page 6: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 6

DBA Recurrent Nightmare• A business critical process experiences an

occasional slow down– Same SQL usually runs quickly– Developers claim they haven’t changed anything– Users claim they do the same every time– Business keeps reporting this: to YOU!

Page 7: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 7

Why Plans Perform Inconsistently? (1)• Concurrency with some other Process• State of Buffer Cache• RAC Node Affinity• CPU Starvation• Sudden Changes on Data Volume• Inconsistent Performance through Database Link

Page 8: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 8

Why Plans Perform Inconsistently? (2)• Downgraded Parallel Execution• Crossing Small-Table Threshold• Resource Manager Directive• Plan Flips• Many Others…

Page 9: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 9

Why a Plan Flips? (1)• Bind Variable Peeking with Histograms• Outdated Schema Object (SO) Statistics• Missing SO Statistics• Fresh SO Statistics• New Empty Partitions

Page 10: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 10

Why a Plan Flips? (2)• Incomplete set of CBO Hints– Either on SQL Text or SQL Profile

• Dropped, Invalid, Invisible or new Indexes• Index or Table rebuild• Two or more Plans with similar Cost

Page 11: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 11

Why a Plan Flips? (3)• Database Parameters Changes• CBO System Statistics Changes• Asynchronous SO Statistics Gathering• Many Others…

Page 12: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 12

How to Mitigate Plan Flipping?• Solid CBO Statistics• Default CBO Parameters• Avoid Global Changes

Page 13: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 13

Plan Flexibility Allies• CBO Parameters• CBO Statistics• Dynamic Sampling• Cardinality Feedback• Cursor Sharing• Adaptive Cursor Sharing (ACS)

Page 14: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 14

Plan Stability Tools• CBO Hints• Stored Outlines• SQL Profiles• SQL Plan Management (SPM)

Page 15: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 15

SQL Plan Management• 11g+• Multiple Persistent Optimal Execution Plans per

SQL• Only “accepted” and “enabled” Plans are Executed• New Plans are acknowledged but not Executed• Goal: Plan Stability with controlled Flexibility

Page 16: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 16

SQL Plan Baseline• A set of Plans available to the CBO for a given SQL– Identified by SQL Handle and Signature • Hash function on SQL Text• dbms_sqltune.sqltext_to_signature

– View dba_sql_plan_baselines• enabled = YES• accepted = YES• reproduced = YES

Page 17: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 17

Plan History• Content of dba_sql_plan_baselines• Includes SQL Plan Baseline • Includes Pending Plans– accepted = NO and last_verified is NULL

• Includes Rejected Plans– accepted = NO and last_verified is not NULL

• Includes Disabled Plans

Page 18: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 18

Methods to Create a Plan Baseline

1. Capture2. Load

a. Cursor Cache (CUR)b. SQL Tuning Set (STS)c. Stored Outline

3. Migration

1. Capture2. Load

a. CURb. STSc. AWRd. SPAe. TRC

3. Migration

Page 19: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 19

Capturing a SQL Plan Baseline (1)• Set optimizer_use_sql_plan_baselines to TRUE

(default)• Set optimizer_capture_sql_plan_baselines to TRUE

(default is FALSE)– Set this parameter at SESSION level

• Execute SQL 2 times• Set optimizer_capture_sql_plan_baselines to FALSE

Page 20: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 20

Capturing a SQL Plan Baseline (2)

Page 21: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 21

Loading SQL Plan Baseline from Cache• dbms_spm.load_plans_from_cursor_cache– Inputs• sql_id• plan_hash_value (opt)

– Outputs• Number of Plans loaded

Page 22: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

22

DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE ( sql_id IN VARCHAR2, plan_hash_value IN NUMBER := NULL, sql_text IN CLOB, fixed IN VARCHAR2 := 'NO', enabled IN VARCHAR2 := 'YES') RETURN PLS_INTEGER;

DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE ( sql_id IN VARCHAR2, plan_hash_value IN NUMBER := NULL, sql_handle IN VARCHAR2, fixed IN VARCHAR2 := 'NO', enabled IN VARCHAR2 := 'YES') RETURN PLS_INTEGER;

DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE ( sql_id IN VARCHAR2, plan_hash_value IN NUMBER := NULL, fixed IN VARCHAR2 := 'NO', enabled IN VARCHAR2 := 'YES') RETURN PLS_INTEGER;

DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE ( attribute_name IN VARCHAR2, attribute_value IN VARCHAR2, fixed IN VARCHAR2 := 'NO', enabled IN VARCHAR2 := 'YES') RETURN PLS_INTEGER;

Enkitec (c) 2014

One of possible attribute names:• 'SQL_TEXT' (like)• 'PARSING_SCHEMA_NAME'

(equality)• 'MODULE' (equality)• 'ACTION' (equality)

SQL text to use in identifying the SQL plan baseline into which the plans are loaded. If the SQL plan baseline does not exist, it is created. The use of text is crucial when the user tunes a SQL statement by adding hints to its text and then wants to load the resulting plan(s) into the SQL plan baseline of the original SQL statement.SQL handle to use in identifying the SQL plan baseline into which the plans are loaded. The sql_handle must denote an existing SQL plan baseline. The use of handle is crucial when the user tunes a SQL statement by adding hints to its text and then wants to load the resulting plan(s) into the SQL plan baseline of the original SQL statement.

Plan identifier. Default NULL means capture all plans present in the cursor cache for the SQL statement identified by SQL_ID.

Page 23: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 23

SQL Plan Baseline Loading Options• Load a Plan from a Hinted version of a SQL into SQL

Baseline of Original SQL– Use SQL Text if there is no pre-existing SQL Baseline– Use SQL Handle if SQL Baseline already exists

• Load one or more Cursor Plans (memory) for a SQL• Load Plans for Subset of Cursors based on Schema,

SQL Text “like” or Application (Module or Action)

Page 24: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 24

Demo 6• Load Plans for Query out of Demo 5– demo5.sql (1st time)– load_plans.sql

• Execute Demo 5 again and review Plan History– demo5.sql (2nd time)– list_plans.sql

• Execute demo5.sql 2x (3rd & 4th) and verify results

Page 25: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 25

Demo 6 Results (after 3rd demo5.sql) CHILD EXECUTIONS BUFFER_GETS PLAN_HASH_VALUE SHAR SENS AWRE----------- ----------- ----------- --------------- ---- ---- ---- 0 3 9090 3600618656 Y Y N

CHILD BUCKET_ID COUNT----------- ----------- ----------- 0 0 0 0 1 1 0 2 2Note----- - SQL plan baseline SQL_PLAN_652hmt7yxthdwc0e59472 used for this statement

CREATED PLAN_NAME ENA ACC REP FIX------------------------------ ------------------------------ --- --- --- ---21-JUN-14 02.00.10.000000 PM SQL_PLAN_652hmt7yxthdw80508062 YES YES YES NO21-JUN-14 02.00.10.000000 PM SQL_PLAN_652hmt7yxthdwc0e59472 YES YES YES NO21-JUN-14 02.00.10.000000 PM SQL_PLAN_652hmt7yxthdwe00bee24 YES YES YES NO21-JUN-14 02.00.19.000000 PM SQL_PLAN_652hmt7yxthdwc82a6b0c YES NO YES NO

Page 26: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 26

Demo 6 Results (after 4th demo5.sql) CHILD EXECUTIONS BUFFER_GETS PLAN_HASH_VALUE SHAR SENS AWRE----------- ----------- ----------- --------------- ---- ---- ----

0 2 723482 847574763 N Y N 1 1 2404 3600618656 Y Y Y 2 1 1977 189372815 Y Y Y 3 1 568 847574763 Y Y Y

Note----- - SQL plan baseline SQL_PLAN_652hmt7yxthdw80508062 used for this statement

CREATED PLAN_NAME ENA ACC REP FIX------------------------------ ------------------------------ --- --- --- ---28-DEC-13 02.03.43.000000 PM SQL_PLAN_652hmt7yxthdw501f1424 YES YES YES NO28-DEC-13 02.03.43.000000 PM SQL_PLAN_652hmt7yxthdwb6c39290 YES YES YES NO28-DEC-13 02.03.43.000000 PM SQL_PLAN_652hmt7yxthdwd624c0cd YES YES YES NO28-DEC-13 02.03.50.000000 PM SQL_PLAN_652hmt7yxthdwc82a6b0c YES NO YES NO

Page 27: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 27

Demo 7• Drop SQL Plan Baseline– drop_plans.sql

• Create SQL Patch with /*+ BIND_AWARE */ Hint– sqlpch.sql for 8u0n7w1jug5dg connected as SYS

• Load Plans for Query out of Demo 5– demo5.sql– load_plans.sql

Page 28: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 28

Demo 7 Results CHILD EXECUTIONS BUFFER_GETS PLAN_HASH_VALUE SHAR SENS AWRE----------- ----------- ----------- --------------- ---- ---- ----

0 1 2191 847574763 N Y Y 1 1 3030 2048551027 Y Y Y 2 1 2404 3600618656 Y Y Y 3 1 1977 189372815 Y Y Y 4 1 568 847574763 Y Y Y

CREATED PLAN_NAME ENA ACC REP FIX------------------------------ ------------------------------ --- --- --- ---21-JUN-14 02.09.14.000000 PM SQL_PLAN_652hmt7yxthdw80508062 YES YES YES NO21-JUN-14 02.09.14.000000 PM SQL_PLAN_652hmt7yxthdwc0e59472 YES YES YES NO21-JUN-14 02.09.14.000000 PM SQL_PLAN_652hmt7yxthdwc82a6b0c YES YES YES NO21-JUN-14 02.09.14.000000 PM SQL_PLAN_652hmt7yxthdwe00bee24 YES YES YES NO

Page 29: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 29

Demo 8• Execute queries 1-5 and observe how number of

Executions increases per Child Cursor– flush.sql– demo8.sql– demo8.sql– demo8.sql

Page 30: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 30

Demo 8 Results CHILD EXECUTIONS BUFFER_GETS PLAN_HASH_VALUE SHAR SENS AWRE----------- ----------- ----------- --------------- ---- ---- ----

0 1 3030 2048551027 Y Y Y 1 1 2404 3600618656 Y Y Y 2 1 1977 189372815 Y Y Y 3 1 568 847574763 N Y Y 4 1 724 847574763 Y Y Y

Note----- - SQL patch "sqlpch_8u0n7w1jug5dg" used for this statement - SQL plan baseline SQL_PLAN_652hmt7yxthdwb6c39290 used for this statement

CHILD EXECUTIONS BUFFER_GETS PLAN_HASH_VALUE SHAR SENS AWRE----------- ----------- ----------- --------------- ---- ---- ----

0 2 6060 2048551027 Y Y Y 1 2 4808 3600618656 Y Y Y 2 2 3954 189372815 Y Y Y 3 1 568 847574763 N Y Y 4 3 2016 847574763 Y Y Y

Page 31: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 31

Evolving a Plan (1)• Evolving a Plan means “accepting” it– Promoting it from Plan History into SQL Plan Baseline

• dbms_spm.evolve_sql_plan_baseline– sql_handle (opt)– plan_name (opt)– verify (default YES)– commit (default YES)

Page 32: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 32

DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE ( sql_handle IN VARCHAR2 := NULL, plan_name IN VARCHAR2 := NULL, time_limit IN INTEGER := DBMS_SPM.AUTO_LIMIT, verify IN VARCHAR2 := 'YES', commit IN VARCHAR2 := 'YES') RETURN CLOB;

DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE ( plan_list IN DBMS_SPM.NAME_LIST, time_limit IN INTEGER := DBMS_SPM.AUTO_LIMIT, verify IN VARCHAR2 := 'YES', commit IN VARCHAR2 := 'YES') RETURN CLOB;

Evolving a Plan (2)

Page 33: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 33

Demo 9• Drop SQL Plan Baseline– drop_plans.sql

• Capture SQL Plan Baseline with 1 accepted Plan– demo9.sql– list_plans.sql

• Evolve all Plans on Plan History– evolve.sql

Page 34: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 34

FIXED Flag• When set to YES– Only FIXED Plans are considered for Plan Selection– No more Plans are Captured into Plan History

Page 35: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 35

Alter SQL Plan BaselinesDBMS_SPM.ALTER_SQL_PLAN_BASELINE ( sql_handle IN VARCHAR2 := NULL, plan_name IN VARCHAR2 := NULL, attribute_name IN VARCHAR2, attribute_value IN VARCHAR2) RETURN PLS_INTEGER;

Attribute Names & Values:enabled 'YES' or 'NO'fixed 'YES' or 'NO'autopurge 'YES' or 'NO'plan_name String of up to 30-charactersdescription String of up to 500-characters

Page 36: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 36

Plan Selection (1)• At hard parse when SQL Plan Baseline (SPB) exists

1. CBO computes an “Optimal” Plan (OP)• Adaptive Cursor Sharing is used if applicable

2. If OP exists in SPB then execute this OP3. If OP does not exist in SPB then store it in Plan History

a. If there are FIXED Plans in SPBi. Re-cost all FIXED Plans using Binds and execute cheapest

b. If there are no FIXED Plans in SPMi. Re-cost all Plans using Binds and execute cheapest

Page 37: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 37

Plan Selection (2)

Page 38: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 38

Demo 10• FIX one Plan from SQL Plan Baseline– alter_plans.sql

• Verify only one Plan was Executed– flush.sql– demo8.sql– demo8.sql

Page 39: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 39

SPM Summary• SPM provides much desired Plan Stability– Only “approved” Plans are allowed to Execute

• ACS can generate a healthy stock of Optimal Plans– You can restrict them to work under SPM

• Combining ACS and SPM you can obtain– Plan Flexibility and Plan Stability

Page 40: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 40

ACS Suggested Strategy• Use sys.dbms_sqldiag_internal.i_create_patch to

SQL Patch with BIND_AWARE the SQL on Baselines • Use free script sqlpch.sql

Page 41: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 41

SPM Suggested Strategies

1. Conservative– One SQL at a time

2. Moderate– One Application at a time (Module or Action)– One Schema at a time

3. Aggressive (a.k.a. Cowboy method)– All Application Schemas at once

Page 42: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 42

Oracle Pack Licenses• DBMS_SPM– No Oracle Pack License

• DBMS_SQLTUNE– Oracle Tuning Pack

• AWR– Oracle Diagnostics Pack

Page 43: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 43

References (1)• Random Slowdown by Jonathan Lewis– http://jonathanlewis.wordpress.com/2013/12/23/plan-

changes/• SQL Plan Management SPM Aware Optimizer– https://blogs.oracle.com/optimizer/entry/

sql_plan_management_part_2_of_4_spm_aware_optimizer

Page 44: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 44

References (2)• Oracle® Database PL/SQL Packages and Types

Reference– 11g Release 2 (11.2)– Part Number E25788-04

Page 45: Using SQL Plan Management (SPM) to balance Plan Flexibility and Plan Stability

Enkitec (c) 2014 45

Contact Information• [email protected]• carlos-sierra.net• @csierra_usa