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> 


     

  • 相关阅读:
    Atitti 图像处理 图像混合 图像叠加 blend 原理与实现
    Atitit Gaussian Blur 高斯模糊 的原理and实现and 用途
    Atitit 图像处理 灰度图片 灰度化的原理与实现
    Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结
    Atitit 实现java的linq 以及与stream api的比较
    Atitit attilax在自然语言处理领域的成果
    Atitit 图像处理 常用8大滤镜效果 Jhlabs 图像处理类库 java常用图像处理类库
    Atitit 图像处理--图像分类 模式识别 肤色检测识别原理 与attilax的实践总结
    Atitit apache 和guava的反射工具
    atitit。企业的价值观 员工第一 vs 客户第一.docx
  • 原文地址:https://www.cnblogs.com/abclife/p/4631215.html
Copyright © 2011-2022 走看看