当前位置:Gxlcms > 数据库问题 > 11g新特性-SQL Plan Management

11g新特性-SQL Plan Management

时间:2021-07-01 10:21:17 帮助过:4人阅读

sql plan baseline是数据库为每个可重复执行sql语句维护的历史执行计划的集合。这些执行计划只包含数据库可接受的执行计划。

1.自动捕获sql plan baselines
自动捕获需要设置参数optimizer_capture_sql_plan_baselines的值为true,默认是false。

SQL> alter system set optimizer_capture_sql_plan_baselines=true scope=spfile;
2.手动加载sql plan到sql plan baselines
可以从SQL Tuning Set (STS) 和 Cursor Cache中创建sql plan baselines。 【在数据库升级时,当心升级后会性能下降的话,可以在升级前将sql plan导出,升级后再导入】 
(1)从sql tuning set中导出sql plan
     #创建空的sql调优集
     begin
          dbms_sqltune.create_sqlset(
               sqlset_name => testset1,
               description => test sql tuning set to capture awr data
          );
     end;
     /

  #使用load_sqlset将sql plan加载到新创建的sql tuning set中

    declare
        test_cursor1 dbms_sqltune.sqlset_cursor;
    begin
        open baseline_cursor for
            select value(p) from table(dbms_sqlture.select_workload_repository(peak baseline,null,null,elapsed_time,null,null,null,20)) p;
        dbms_sqlset.load_sqlset(sqlset_name => testset1,populate_cursor => test_cursor1);
    end;
    /

  #将sql tuning set中的数据导入sql plan baselines

    declare
        test_plans pls_integer;
    begin
        test_plans := dbms_spm.load_plans_from_sqlset(sqlset_name => testset1);
    end;
    /

(2)从Cursor Cache中导出sql plan

 declare
  test_plans pls_integer;
 begin
  test_plans := dbms_spm.load_plans_from_cursor_cache (
  sql_id => 123456789999)
  return pls_integer;
 end;
 /

 

管理sql plan baselines使用oracle提供的dbms_spm包。

查看SQL plan baselines的属性

select sql_handle,
       sql_text,
       plan_name,
       origin,
       enabled,
       accepted,
       fixed,
       autopurge
  from dba_sql_plan_baselines;

将某个sql plan修改为accept状态

SQL> exec dbms_spm.alter_sql_plan_baselines(
        sql_handle => SYS_SQL_122222222,
        plan_name => SYS_SQL_PLAN_b5429522ee05ab0e,
        attribute_name => accepted-status,
        attribute_value => YES);

查看某个sql的baseline:

select *
  from table(dbms_xplan.display_sql_plan_baseline(sql_handle => SYS_SQL_ba5e12ccae97040f,
                                                  format     => basic));

 


SQL Management Base
sql plan management将sql plan baselines信息存放在一个新的数据字典中--sql management base(SMB)。
SMB被存放在sysaux表空间中。

配置sql management base(SMB)
配置SMB需要设置以下两个参数:

SQL> select parameter_name,parameter_value 
  2  from dba_sql_management_config;

PARAMETER_NAME                 PARAMETER_VALUE
------------------------------ ---------------
SPACE_BUDGET_PERCENT                        10
PLAN_RETENTION_WEEKS                        53

SQL> 

参数space_budget_percent表示SMB可以占用sysaux表空间的比例。默认是10%

SQL> exec dbms_spm.configure(space_budget_percent,40);
SQL> exec dbms_spm.configure (plan_retention_weeks, 105);

#手动清空SMB

SQL> exec dbms_spm.purge_sql_plan_baseline(SYS_SQL_PLAN_b5429522ee05ab0e);

查看SMB配置信息:

SQL> select PARAMETER_NAME,PARAMETER_VALUE,LAST_MODIFIED,MODIFIED_BY
  2  from dba_sql_management_config;

PARAMETER_NAME                 PARAMETER_VALUE LAST_MODIFIED        MODIFIED_BY
------------------------------ --------------- -------------------- --------------------
SPACE_BUDGET_PERCENT                        10
PLAN_RETENTION_WEEKS                        53

SQL> 


 

 

 

11g新特性-SQL Plan Management

标签:

人气教程排行