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

论坛 期权论坛 脚本     
匿名技术用户   2021-1-4 06:44   11   0

使用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 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP