2.6 Oracle里执行计划的稳定 《基于Oracle的优化(学习笔记)》

使用SQL Profile来稳定执行计划

 

Automatic类型的SQL Profile

 

DECLARE
    my_task_name   VARCHAR2 (30);
    my_sqltext     CLOB;
BEGIN
    my_sqltext := 'select /*+ no_index(t1 idx_t1) */ * from t1 where n=1';
    my_task_name :=
        DBMS_SQLTUNE.create_tuning_task (
            sql_text       => my_sqltext,
            user_name      => 'SCOTT',
            scope          => 'COMPREHENSIVE',
            time_limit     => 60,
            task_name      => 'my_sql_tuning_task_3',
            description   => 'Task to tune a query on table t1');
END;
/


begin
     dbms_sqltune.execute_tuning_task(task_name=>'my_sql_tuning_task_3');
    end;
    /

set long 9000
set longchunksize 1000
set linesize 800
select dbms_sqltune.report_tuning_task('my_sql_tuning_task_3') from dual;

 

Automatic类型的SQL Profile可以在不改变目标SQL的SQL文本的情况下改变执行计划

 

Manual类型的SQL Profile

Manual类型的SQL Profile可以在不改变目标SQL的SQL文本的情况下改变执行计划

 

 

使用SPM来稳定执行计划

SPM的推出彻底地解决了执行计划稳定性的问题,它既能够主动地稳定执行计划,又保留了继续使用执行效率更高的执行计划的机会。

 

自动捕获产生SQL PLAN BASELINE

DBA_SQL_PLAN_BASELINES中的列ENABLED和ACCEPTED用来描述SQL Plan Baseline对应的执行计划是否能被Oracle启用

OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES用于控制是否开启自动捕获SQL Plan Baseline,默认值为FALSE。

OPTIMIZER_USE_SQL_PLAN_BASELINES用于控制是否启用SQL Plan Baseline,默认值为TRUE。

 

 

手工生成SQL PLAN BASELINE

针对目标SQL使用DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE手工生成其初始化执行计划对应的SQL Plan Baseline,语法如下:

dbms_spm.load_plans_from_cursor_cache

(

sql_id=>'原目标SQL的SQL_ID'

plan_hash_value=>原目标的PLAN HASH VALUE

)

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值