zoukankan      html  css  js  c++  java
  • 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> 
    复制代码


     

  • 相关阅读:
    HDU1720 A+B Coming
    HDU1390 ZOJ1383 Binary Numbers
    HDU1390 ZOJ1383 Binary Numbers
    HDU2504 又见GCD
    HDU2504 又见GCD
    HDU1335 POJ1546 UVA389 UVALive5306 ZOJ1334 Basically Speaking
    HDU1335 POJ1546 UVA389 UVALive5306 ZOJ1334 Basically Speaking
    HDU1020 ZOJ2478 Encoding
    HDU1020 ZOJ2478 Encoding
    HDU2097 Sky数
  • 原文地址:https://www.cnblogs.com/wangchaoyuana/p/7532065.html
Copyright © 2011-2022 走看看