• 11g新特性-SQL Plan Management


    在11g之前版本,提供了stored outlines(sql概要)特性来保存sql的执行计划。

    在11g中,引入了一个新的特性sql计划管理(sql plan management)特性来保存sql性能。

    数据库自动控制sql执行计划的演变,借助sql plan baselines。 SPM会不时的捕获和评估sql的执行计划,然后建立只包含高效的执行计划的sql plan baselines。 sql plan baselines只会包含那些不会引起sql性能下降的执行计划。

    当系统遇到以下变化时,可以使用SPM来保存sql的性能信息:

    -数据库升级

    -新的优化器版本

    -优化器参数修改

    -系统设置变更

    -schema信息和元数据变更

    -部署新的应用模块

    sql plan baselines

    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> 
    复制代码


     

  • 相关阅读:
    TC字符界面菜单程序【原创】
    图片定时自动播放
    根据登录的不同权限,登录不同的窗口!
    html布局
    sprig 的基本使用方法和运用领域
    hibernate的链接数据库的基本步骤
    Jquery
    Java链接数据库的基本步骤
    ajax
    SQL索引的初步使用
  • 原文地址:https://www.cnblogs.com/wangchaoyuana/p/7532065.html
Copyright © 2020-2023  润新知