Oracle 11g 执行计划管理概述

以下内容来源于:http://www.51cto.com/art/200806/76223.htm

35.2  执行计划管理

35.2.1  概述

同一SQL语句的执行计划可能因为优化器的版本、优化统计、优化参数、系统设置的不同而不同。而SQL语句的执行计划自动改变,通常情况下会带来性能提升,但是在某些情况下可能导致系统性能的下降。在11g之前,DBA使用存储大纲(Stored Outline)和SQL 概要(Profile)来固定某些SQL语句的执行计划,防止因为系统自动更改执行计划而导致的性能下降。但是,它们都需要手工的主动配置。

在11gr1版本中,Oracle引入SQL执行计划管理(SQL Plan Management),让系统自动来控制、使用更好的执行计划,进而防止执行计划发生变化而导致的性能下降。通过设置OPTIMIZER_CAPTURE_ SQL_PLAN_BASELINES为TRUE激活这个选项。当激活这个执行计划管理新特性后,如果某条语句产生了一个新的执行计划,那么仅在比参考的执行计划更优的情况下新计划才会被使用。

为了实现执行计划管理,优化器自动为所有执行次数超过一次的SQL语句维护执行的计划历史(Plan History)。优化器通过维护一个语句执行的声明日志(Statement Log)来识别该SQL语句是否为第二次执行。计划历史中包含了优化器能够重新生成执行计划的所有信息,包括SQL脚本、存储大纲、绑定变量以编译环境等。Oracle同时支持手工维护SQL语句的计划历史。

为了得到更好的执行计划,系统定义了一个计划基线。执行计划基线是执行计划历史的一个子集,而执行计划基线里面的执行计划是用来与新执行计划比较的参考基准。一条SQL语句的新执行计划与计划基线里的所有计划进行比较,如果性能是最优的,则执行新的执行计划。某个SQL语句的执行计划属于计划历史,但是不一定属于计划基线。

声明日志、执行计划历史以及计划基线都存储在SQL管理库(SMB)中,它也包括了SQL概要。SMB是数据字典的一部分,存储在SYSAUX表空间中。这些元素之间的关系如图35-3所示。

图35-3  相关元素关系图

有两种方法可以将SQL语句的执行计划加载到执行计划基线中,即席捕获和块加载。

(1)即席捕获:将初始化参数OPTIMIZER_CAPTURE_PLAN_BASELINES设置为TURE,则会自动地捕获SQL的执行计划,它默认为FALSE。设置为TRUE后,它自动识别重复的SQL语句,并自动地创建其计划历史,同时也会将第一次生成的执行计划放入到计划基线中,这就构成了最初的基线。

(2)块加载:使用DBMS_SPM包手动管理计划基线。利用包提供的功能,你可以直接将SQL的执行计划从游标缓冲(Cursor Cache)或者存在的调优集中加载到计划基线里。DBMS_SPM能够改变基线计划的状态(可用和不可用),也可以将计划基线里的执行计划清除。它同样可以导出计划基线,以便于加载到其他的数据库中使用。

在计划基线的变化阶段,Oracle数据库会估计新计划的性能,并将更好性能的执行计划放到计划基线中。当优化器发现SQL语句的新执行计划时,新计划被增加到计划历史中,但是这时属性是不可接受的,当被自动或手动地证实不会造成性能的下降后,计划属性被修改为可以接受的,并且被加载到计划基线中。

有两种方式触发计划基线的变化:

(1)执行DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE函数。

例如,如下脚本返回一个报告,列出存在的历史计划是否放到了计划基线中。

variable report clob;exec :report:=DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE(sql_handle=> ‘SYS_SQL_456sd76kjhiuykh’);print report

(2)运行SQL调优顾问(Advisor):在利用SQL调优顾问优化SQL脚本时,可以手动或自动地触发计划基线的变化。当调优顾问发现一个优化的计划而且证实性能优于计划基线中的一个执行计划时,则它会推荐接受这个SQL概要(Profile),当SQL概要被接受时,调优的计划也被增加到相应的计划基线中。

在DBA_SQL_PLAN_BASE_LINES视图中,包含了有关执行计划的相关信息。几个重要的属性包括:

·ORIGIN:表示执行计划的来源,如自动捕获、手动加载、手动调优和自动调优等。

·ENABLED:表示执行计划是否被启用,优化器可以使用。

·ACCEPTED:表示执行计划是否被自动或手动地确认为好的执行计划。一个执行计划只有当ENABLED而且ACCEPTED时,优化器才考虑使用。可以通过DBMS_SPM.ALTER_SQL_PLAN_BASELINE函数改变它的状态。

·FIXED:表示优化器仅仅考虑这些执行计划。例如,当计划基线中存在10个执行计划,而只有3个被设置为FIXED时,则优化器只使用这3个计划中最优的。

例如,查看执行计划信息:

select signature, sql_handle, sql_text, plan_name, origin, enabled, accepted, fixed, autopurge from dba_sql_plan_baselines where sql_text like ‘select  %‘;

此外,可以改变执行计划属性值。例如:

variable cnt number;exec :cnt := dbms_spm.alter_sql_plan_baseline( sql_handle        => ‘SYS_SQL_0a9d872600ece455‘, plan_name         => ‘SYS_SQL_PLAN_00ece45554bc8843‘, attribute_name    => ‘ENABLED‘, attribute_value   => ‘NO‘);

也可以清除某个执行计划。例如:

variable cnt number;exec :cnt := dbms_spm.drop_sql_plan_baseline(‘SYS_SQL_6fe28d438dfc352f‘);

通过DBA_SQL_MANAGEMENT_CONFIG视图,可以得到SMB的空间配置和清除策略等信息,并且可以通过DBMS_SPM.CONFIGURE过程修改。例如:

SQL>exec dbms_spm.configure(‘SPACE_BUDGET_PERCENT’,20);SQL>exec dbms_spm.configure(‘PLAN_RETENTION_WEEKS’,100);

分别设置执行计划占用SYSAUX空间的20%(默认为10%)和保留周期为100周。

时间: 2024-10-03 14:00:59

Oracle 11g 执行计划管理概述的相关文章

Oracle 11g 执行计划管理1

1. 执行计划管理的工作原理 1.1控制执行计划的稳定性 11g之前,可以使用存储大纲(stored outline)和SQL Profile来固定某条SQL语句的执行计划,防止由于执行计划发生变化而导致的性能下降. 11g开始,oracle引入了SQL执行计划管理,从而可以让系统自动的来控制SQL语句执行计划的稳定性,进而防止由于执行计划发生变化而导致的性能下降 1.2 11g执行计划管理 优化器会为所有执行次数超过一次的SQL语句维护该SQL语句的每个执行计划的历史列表(plan histo

Oracle 11g 执行计划管理2

1.创建测试数据 SQL> conn NC50/NC50 Connected. SQL> create table tab1(id number,object_name varchar2(100)); SQL> insert into tab1 select rownum,object_name from dba_objects; SQL> commit; SQL> set line 180 SQL> select * from tab1 where id=200; S

oracle SPM 执行计划管理

************************************************************ 第一部分:概念 ************************************************************ SQL 计划管理是一种随Oracle Database 11g 引入的新功能,通过维护所谓的"SQL 计划基线(SQL plan baseline(11g))"来使系统能够自动控制SQL 计划演变.启用此功能后, 只要证明新生成的

Oracle性能优化之执行计划管理_超越OCP精通Oracle视频教程培训31

Oracle性能优化之执行计划管理_超越OCP精通Oracle视频教程培训31 本课程介绍: Oracle视频教程,风哥本套oracle教程培训<<Oracle数据库性能优化培训教程>>的第1/10套:Oracle性能优化之执行计划管理.主要学习Oracle性能优化简介,SQL 语句处理流程,软解析和硬解析,绑定变量及案例,游标的介绍,Oracle的优化器,执行计划的查看,SQL语句访问路径,SQL语句的连接方式,Oracle驱动表,执行计划的干预,常用hint提示的使用. 视频教

[转]Oracle DB SQL 计划管理

? 设置SQL 计划管理 ? 设置各种SQL 计划管理方案 SQL 计划管理:概览 ? SQL 计划管理是自动控制的SQL 计划演变. ? 优化程序可自动管理SQL 计划基线. – 仅使用已知的和经过验证的计划. ? 将自动对计划更改进行验证. – 仅继续使用可比较的或较好的计划. ? 可通过SQL 性能分析器在SQL 优化集(STS)  中预先植入重要的SQL SQL 计划管理:概览 SQL 语句的SQL 执行计划发生更改时,可能存在性能风险. SQL 计划发生更改的原因有很多,如优化程序版本

oracle稳定执行计划1

稳定执行计划 1 策略: Oracle的sql 执行计划在一些场景下会发生变化,导致系统会发生不可知的情况,影响系统的稳定性,特别是关键业务的sql. 比如下面的场景: 统计信息过老,重新收集了统计信息. 为表添加了新的分区,删除分区. 而oracle提供的稳定执行计划的策略也大致有: 存储纲要(stored outlines) Sql 基线(sql baseline 11g) Sql profile Hint 在这几种方式中,在应用端任何的sql变动都会使stored outlines, sq

Oracle SQL执行计划基线总结(SQL Plan Baseline)

一.基础概念 Oracle 11g开始,提供了一种新的固定执行计划的方法,即SQL plan baseline,中文名SQL执行计划基线(简称基线),可以认为是OUTLINE(大纲)或者SQL PROFILE的改进版本,基本上它的主要作用可以归纳为如下两个: 1.稳定给定SQL语句的执行计划,防止执行环境或对象统计信息等等因子的改变对SQL语句的执行计划产生影响! 2.减少数据库中出现SQL语句性能退化的概率,理论上不允许一条语句切换到一个比已经执行过的执行计划慢很多的新的执行计划上! 注意:

[转]Oracle DB 执行用户管理的备份和恢复

• 说明用户管理的备份和恢复与服务器管理的备份和恢复之间的差异 • 执行用户管理的数据库完全恢复 • 执行用户管理的数据库不完全恢复 备份和恢复的使用类型 数据库备份和恢复的类型包括: • 用户管理的:不使用RMAN – 使用OS 命令移动文件 – DBA 需要手动维护备份活动记录 • 服务器管理的:使用RMAN 有两种方法可用来恢复数据库.可以使用RMAN 并利用其自动恢复功能.它可以还原相应的文件,并使用非常少的命令使数据库恢复到当前状态.还可以手动进行恢复.这称为“用户管理的恢复”.用户管

使用hint优化Oracle的执行计划

背景: 某表忽然出现查询非常缓慢的情况,cost 100+ 秒以上:严重影响生产. 原SQL: explain plan for select * from ( select ID id,RET_NO retNo, FROM_SYS fromSy, TO_SYS toSys, COMMAND_CODE commandCode, COMMAND, STATUS, EXT_CODE, ORIGN_CODE orignCode,error_message errorMessage, RE_F, RET