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> 

时间: 2024-12-16 04:14:56

11g新特性-SQL Plan Management的相关文章

[转]Oracle 11g 新特性 -- SQL Plan Management 说明

一 概述 二 SQL 计划基线Plan BaseLine体系结构三 加载SQL 计划基线四 演化SQL 计划基线五 重要的基线SQL 计划属性六 SQL 计划选择七 可能的SQL 计划可管理性方案八 SQL 性能分析器和SQL 计划基准方案九 自动加载SQL 计划基线方案十 清除SQL 管理库策略 一.概述 SQL 语句的SQL 执行计划发生更改时,可能存在性能风险. SQL 计划发生更改的原因有很多,如优化程序版本.优化程序统计信息.优化程序参数.方案定义.系统设计和SQL 概要文件创建等.

[转]Oracle 11g 新特性 -- SQL Plan Management 示例

目录 一 SPM 说明 相关名词说明 SPM的特点 与profile和outline相比更加灵活的控制手段 SPM使计划真正的稳定 SPM的控制方式 SPM如何捕捉加载执行计划 自动捕捉 批量导入 执行计划的选择过程 执行计划的演化evolution 修改已有的Baseline 相关MOS 文档 二 SPM 示例 自动捕捉 手工捕获执行计划 演化SQL Plan Baselines 完整示例 修改 Plan Baselines 显示SQL Plan Baselines 设置SQL Managem

oracle11g新特点——SQL Plan Management(SPM)

1.   简介 Oracle Database11gR1引进了SQL PlanManagement(简称SPM),一套允许DBA捕获和保持任意SQL语句执行计划最优的新工具,这样,限制了刷新优化器统计数据,已有应用改变,甚至数据库版本升级带来的影响.本文帮助对SPM原理基本了解,并对其性能优化能力进行简要的说明. 2.   SPM原理和机制 Oracle 11g通过一个简单而优雅的方法实施了解决SQL计划意外恶化的一套称为SQL Plan Management(SPM)的新特点.只要用户会话开启

oracle11g中SQL优化(SQL TUNING)新特性之SQL Plan Management(SPM)

1.   简单介绍 Oracle Database11gR1引进了SQL PlanManagement(简称SPM),一套同意DBA捕获和保持随意SQL语句运行计划最优的新工具,这样,限制了刷新优化器统计数据.已有应用改变.甚至数据库版本号升级带来的影响.本文帮助对SPM原理基本了解,并对其性能优化能力进行简要的说明. 2.   SPM原理和机制 Oracle 11g通过一个简单而优雅的方法实施了解决SQL计划意外恶化的一套称为SQL Plan Management(SPM)的新特点.仅仅要用户

11g新特性-自动sql调优(Automatic SQL Tuning)

11g新特性-自动sql调优(Automatic SQL Tuning) 在Oracle 10g中,引进了自动sql调优特性.此外,ADDM也会监控捕获高负载的sql语句. 在Oracle 11g中,通过运行sql tuning advisor加强了自动sql调优功能.默认情况下是每天夜间通过自动任务的方式运行"自动sql调优". 自动sql调优的过程: 1.识别需要调优的sql语句  根据AWR中的CPU和I/O负载来识别 2.调优,生成新的sql profile 在维护窗口(mai

Oracle 11g 新特性 -- Oracle Restart 说明(转载)

转载:http://blog.csdn.net/tianlesoftware/article/details/8435670 一.  OHASD 说明 Oracle 的Restart 特性是Oracle 11g里的新特性,在讲这个特性之前先看一下Oracle 11g RAC的进程.之前的Blog 有说明. Oracle 11gR2RAC 进程说明 http://blog.csdn.net/tianlesoftware/article/details/6009962 Oracle 11gR2 中对

Oracle 11g新特性invisible index(不可见的索引)

如果一张表上有十几个索引,你有什么感受?显然会拖慢增.删.改的速度,不要指望开发人员能建好索引.我的处理方法是先监控很长的一段时间,看哪些索引没有用到,然后删除.但删除以后,如果发现某一天有用,那又要重新建,如果是大表,那就有些麻烦.现在11g提供一个新特性,不可见索引,可以建索引设置为不可见索引,CBO在评估执行计划的时候会忽略它,如果需要的时候,设置回来即可. 还有一种用途,你在调试一条SQL语句,要建一个索引测试,而你不想影响其他的会话,用不可见索引正是时候. SQL> drop tabl

Oracle 11g新特性之--Server Result Cache

Oracle 11g新特性之--Server  Result Cache 一.Server Result Cache说明 Oracle官网的说明,参考: 7.6 Managing the Server and Client  Result Caches http://docs.oracle.com/cd/E11882_01/server.112/e16638/memory.htm#BGBCABED 1.1 概述 SQL 查询结果高速缓存可在数据库内存中对查询结果集和查询碎片启用显式高速缓存.存储

Bullet:ORACLE Using SQL Plan Management(一)

SQL Plan Management如何工作? 当一个SQL硬解析时,基于成本的优化器CBO会生成多个执行计划,并从这些执行计划中选择一个优化器认为最低成本的执行计划. 如果SQL plan baseline生效,优化器会将刚刚生成的执行计划与SQL plan baseline中的执行计划进行比较. 如果该执行计划和基线中的执行计划匹配,且基线中的执行计划标记为可接受(accepted = yes),那么该执行计划将被使用: 如果基线中不存在标记为可接受的执行计划与刚刚生成的执行计划匹配,优化