Let’s look at below in detail
Why Execution Plan gets changes? How to fix Bad SQL Plan? Image flow of SQL Profile & SQL Plan BaseLine Create SQL Profile ( Considering SQL Tuning Adviser Suggestions) How to Create SQL Profile ? ( Which script is used?)
How to fix Bad SQL Plan? .
You can fix the SQL Plan by either SQL Profile / SQL Plan Baseline
Let’s take look at what they are and differences?
SQL profiles and SQL plan baselines help improve the performance of SQL statements by ensuring that the optimizer uses only optimal plans. ==>Baselines define the set of execution plans that can be used by each query, SQL Profiles only provide additional information to “push” the optimizer to favor one or another plan, ==>SQL plan baselines are proactive, whereas SQL profiles are reactive. ==>SQL plan baselines reproduce a specific plan, whereas SQL profiles correct optimizer cost estimates. SQL plan baselines prevent the optimizer from using suboptimal plans in the future.
Image flow of SQL Profile & SQL Plan BaseLine.
Create SQL Profile ( Considering SQL Tuning Adviser Suggestions)
1) Run SQL Tuning Adviser(sqltrpt.sql/OEM) and get the suggestions for available best plan 2) Create SQL Profile using SQLT Script (coe_xfr_sql_profile.sql) 3) Flush the SQL ID from Memory ( Cancel any Jobs w.r to SQL ID,then flush) 4) Now you could see the new plan is reflected ( From gv$sql)
This is best plan available for this SQL ID , we have to force the good plan by SQL Profile creation
PLAN_HASH_VALUE AVG_ET_SECS
————— ———–
2538395789 .437————> not reproducibe
2141716862 100.932———–last seen 2018-12-03/17:00:03 original plan
420475214 4898.131 ========== current Plan
How to Create SQL Profile ? ( Which script is used?)
Using coe_xfr_sql_profile.sql ,we can create it ( No need of Installation ,Just Download SQLTXPLAIN (SQLT),Refer Download SQLT section
SQL > @coe_xfr_sql_profile.sql
SQL> @/dba/srinalla/scripts/sqlt/sqlt/utl/coe_xfr_sql_profile.sql Parameter 1: SQL_ID (required)
Enter value for 1: 8ap1zyhp2q7xd
PLAN_HASH_VALUE AVG_ET_SECS --------------- ----------- 2538395789 .437 2819292650 .599 3897290700 4.068 3111005336 4.21 3446519203 6.4
Parameter 2:
PLAN_HASH_VALUE (required)
Enter value for 2: 2141716862
Values passed to coe_xfr_sql_profile:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL_ID : "8ap1zyhp2q7xd"
PLAN_HASH_VALUE: "2141716862"
Execute coe_xfr_sql_profile_8ap1zyhp2q7xd_2141716862.sql
on TARGET system in order to create a custom SQL Profile
with plan 2141716862 linked to adjusted sql_text.
Now, You can create the SQL Profile with above Script
SQL> @coe_xfr_sql_profile_8ap1zyhp2q7xd_2141716862.sql PL/SQL procedure successfully completed. SQL> WHENEVER SQLERROR CONTINUE SQL> SET ECHO OFF; SIGNATURE --------------------- 582750245629242078 SIGNATUREF --------------------- 582750245629242078 ... manual custom SQL Profile has been created
<strong><span style="color:#0000ff;">FROM SQL Tuning Advisor, this Can be run from DB Node as below(or OEM Cloud Control)</span></strong>
SQL @?/rdbms/admin/sqltrpt.sql
Specify the Sql id ~~~~~~~~~~~~~~~~~~ Enter value for sqlid: 8ap1zyhp2q7xd Sql Id specified: 8ap1zyhp2q7xd Tune the sql ~~~~~~~~~~~~ GENERAL INFORMATION SECTION Tuning Task Name : TASK_313228 Tuning Task Owner : SYS Workload Type : Single SQL Statement Scope : COMPREHENSIVE Time Limit(seconds): 1800 Completion Status : COMPLETED Started at : 12/10/2018 02:09:31 Completed at : 12/10/2018 02:16:37 Schema Name: APPS SQL ID : 8ap1zyhp2q7xd SQL Text : SELECT /*+ leading (gjl gjh) */ GJL.EFFECTIVE_DATE ACC_DATE,
/ FINDINGS SECTION (3 findings) 1- SQL Profile Finding (see explain plans section below) -------------------------------------------------------- A potentially better execution plan was found for this statement. Recommendation (estimated benefit: 82.16%) ------------------------------------------ - Consider accepting the recommended SQL profile. execute dbms_sqltune.accept_sql_profile(task_name => 'TASK_313228',task_owner => 'SYS', replace => TRUE); id plan hash last seen elapsed (s) origin note -- ---------- -------------------- ------------ --------------- -------------- 1 3013459780 2018-06-03/23:58:03 2.674 STS not reproducible 2 3897290700 2018-12-06/14:00:54 7.268 AWR not reproducible 3 2141716862 2018-12-03/17:00:03 22.321 AWR original plan 4 1462347114 2018-12-06/17:00:38 50.572 AWR not reproducible 5 1471114134 2018-12-07/16:00:04 60.236 AWR not reproducibe 3- Alternative Plan Finding ---------------------------------------------- Some alternative execution plans for this statement were found by searching the system's real-time and historical performance data. The following table lists these plans ranked by their average elapsed time. See section "ALTERNATIVE PLANS SECTION" for detailed information on each plan.
References
Database SQL Tuning Guide
Using Oracle baselines you can fix the sql plan for a SQLID
How To Improve SQL Statements Performance: Using SQL Plan Baselines
SQL Profiles Vs SQL Plan Baselines? by Girish Kumar
What is the difference between SQL Profiles and SQL Plan Baselines?
One Easy Step To Get Started With SQL Plan Baselines
2 Useful Things To Know About SQL Plan Baselines
Parsing SQL Statements in Oracle
#tuning
1) Added Basics difference of SQL Profiles and SQL Plan Baselines & their flow
2) Add Reference links for more reading
LikeLike