17.正在运行的数据库是否能开启执行计划自动捕获Doc ID 1520337.1

本文详细解释了Oracle数据库中的SQL计划基线管理和优化器_capture_sql_plan_baselines的行为。重点在于计划的自动捕获规则,固定和接受计划对计划演变的影响,以及如何控制和手动干预。
摘要由CSDN通过智能技术生成

1.执行计划基线可以开启的理由

(1)
优化器 capture_sql_plan_baselines
控制sql计划管理的所有计划的自动捕获,这是一个常见的误解。事实上,optimizer_capture_sql_plan_baselines
仅控制特定sql语句的第一个计划的捕获。也就是说,仅适用于当前没有任何计划记录在计划历史记录中的SQL语句。
第一个捕获总是放在语句的SQL计划基线中——它被启用并接受。

--执行计划历史
select distinct SQL_ID,PLAN_HASH_VALUE,to_char(TIMESTAMP,'yyyymmdd hh24:mi:ss')  TIMESTAMP
from dba_hist_sql_plan 
where SQL_ID='68wnxdjxwwn2h' order by TIMESTAMP;

(2)
一旦存在由SQL_HANDLE标识的SQL语句,优化器_capture_SQL_plan_baselines就不再对捕获其他计划有任何影响。
每当optimizer_use_sql_plan_baselines=TRUE时,为语句找到的新计划将记录在历史记录中。
创建这些计划是为了使其可用于计划演变,但创建为不可接受,因此在验证之前不会使用这些计划。
此演进过程使用DBMS_SPM运行。EVOLVE_SQL_PLAN_BASELINES。
如果一个固定的计划在基线中——也就是说,对于该语句存在一个已启用、已接受和已固定的计划——则该
SQL语句不可用于计划演变。因此,将基线中计划的FIXED属性设置为YES也会禁用此捕获过程。

(3)
如果您不希望为具有基线的SQL语句捕获其他计划,则必须将基线中的计划设置为FIXED=YES。
"固定"应理解为不应制定计划。(请注意,您许多人都需要FIXED=YES和ENABLED=YES,在11g上这是需要的。)

(4)
如果希望将具有基线的SQL语句的附加捕获计划标记为ACCEPTED=YES,则必须使用DBMS_SPM对其进行演化。
EVOLVE_SQL_PLAN_BASELINES。(注意:在12c中,除非您禁用,否则进化过程将在维护窗口期间自动运行。)
您可以使用verify=>"NO"强制接受它们,而无需验证它们是否运行良好。
注意:请记住,只执行一次的SQL语句不会从SQL计划基线中受益。
即使optimizer_capture_sql_plan_baselines为TRUE,自动计划捕获也仅发生在已执行至少两次的sql语句上。

2.总结 

执行计划基线管理是可以开启的。
开启后人工介入的机会增多。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值