1)针对目标SQL使用DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE手工生成其初始执行计划所对应的SQL Plan Baseline。此时,使用DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE传入的参数如下所示: dbms_spm.load_plans_from_cursor_cache(sql_id=>'原目标SQL的SQL_ID',pla
:temp := dbms_spm.load_plans_from_cursor_cache(sql_id=>'11cptg7m2vcwr', plan_hash_value=>300966803, sql_handle =>'SQL_20df29fdb3e8ac52'); end; / 查看原始sql的基线 SQL> select sql_handle, sql_text, plan_name, origin from dba_sql_plan_baselines where sql_text like 'select * ...
EXEC DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(sql_handle => 'sql_handle_value', plan_name => 'baseline_name', fixed => 'YES'); 复制代码 启用SQL Plan Baseline:一旦收集了SQL语句的执行计划,可以使用DBMS_SPM包中的ACCEPT_SQL_PLAN_BASELINE过程来启用SQL Plan Baseline。这可以通过执行以下命令来完成:...
sql plan baseline的管理流程: 第一步:捕获执行计划(主要作用:检测执行计划和记录的改变并记录到baseline中,捕获方式有两种:1、自动捕获 2、手工load) 手工load执行计划—>from cursor cache DECLARE my_plans PLS_INTEGER; BEGIN my_plans := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE( sql_id => '99twu5t2dn...
前面文章给大家介绍了当一条sql有多个执行计划时,如何通过spm去绑定其中一条执行计划。本文将继续介绍,如何给一条sql注入一个新的执行计划,去替换原始的执行计划。 二、解决办法 1. 生成初始执行计划所对应的sql plan baseline begin :temp := dbms_spm.load_plans_from_cursor_cache( ...
SQL> exec :cnt := dbms_spm.load_plans_from_cursor_cache(sql_id => '&sql_id', plan_hash_value => '&plan_hash_value'); sql_idに値を入力してください: 3uat1k9ssur9p plan_hash_valueに値を入力してください: 3563712581 PL/SQLプロシージャが正常に完了しました。
SQL> begin:temp :=dbms_spm.load_plans_from_cursor_cache(sql_id=>'66a4184u0t6hn', plan_hash_value=>2214001748); end; / 再执行以下sql SQL> select /*for_test*/ * from test1 where object_id = 1;Execution Plan ---Plan hash value: 2214001748--- | Id | Operation ...
当启用了SPM后,每一个SQL都会存在对应的SQL Plan Baseline,这个SQL Plan Baseline里存储的就是该SQL的执行计划,如果一个SQL有多个执行计划,那么该SQL就可能会有多个SQL Plan Baseline,可以从DBA_SQL_PLAN_BASELINES中查看目标SQL所有的SQL Plan Baseline。
SPM是一种主动的稳定执行计划的手段,能够保证只有被验证过的执行计划才会被启用,当由于种种原因(如统计信息的变更)而导致目标SQL产生了新的执行计划后,这个新的执行计划并不会被马上启用,直到它已经被我们验证过其执行效率会比原先执行计划高才会被启用。
其次,Oracle11g有个新的包DBMS_SPM,通过从以下几个来源手工“种植”计划,可以预先捕获和引进大量SQL语句: Ø 数据库Library Cache中一个或多个SQL语句能被用来创建SQL PlanBaselines。过程LOAD_PLANS_FROM_CURSOR_CACHE能被用来在Library Cache中捕获任何语句的子集作为潜在SMB的候选。