Oracle 11g 执行计划管理1

1. 执行计划管理的工作原理

1.1控制执行计划的稳定性

  • 11g之前,可以使用存储大纲(stored outline)和SQL Profile来固定某条SQL语句的执行计划,防止由于执行计划发生变化而导致的性能下降.
  • 11g开始,oracle引入了SQL执行计划管理,从而可以让系统自动的来控制SQL语句执行计划的稳定性,进而防止由于执行计划发生变化而导致的性能下降

1.2 11g执行计划管理

  • 优化器会为所有执行次数超过一次的SQL语句维护该SQL语句的每个执行计划的历史列表(plan history)。
  • 优化器通过维护一个语句执行的日志条目(statement log)来识别该SQL语句是否为第二次执行。一旦优化器认出某条SQL语句为第二次执行,则优化器将该语句所生成的所有不同的执行计划插入到plan history的相关表里。
  • 准线(plan baseline)是plan history的一个子集,plan baseline里面的执行计划是用来比较性能好坏的一个依据。

  凭什么来判断是否可以使用一个新产生的执行计划呢?就是把该新的执行计划与plan baseline里的计划进行比较来判断。 某个SQL语句的执行计划可以属于plan history,但是不一定属于plan baseline。

2.有两种方法可以将SQL语句的执行计划纳入到执行计划管理体系中去

2.1  OPTIMIZER_CAPTURE_PLAN_BASELINES

  OPTIMIZER_CAPTURE_PLAN_BASELINES=true,则会自动的捕获SQL的执行计划,但该参数缺省为false。

  当某条SQL语句第一次执行时,该SQL语句的plan history是空的,显然该SQL语句的plan baseline也是空的。 那么当该SQL第二次再次执行时,优化器会自动将该SQL语句以及相关的执行计划放入plan history,同时也会放入到plan baseline里。

  当你做了某些修改(比如添加了一个索引等),然后第三次执行该同样的SQL语句,则会产生另外一个不同的执行计划。这时新的执行计划会自动进入plan history,但是不会自动进入plan baseline。 是否使用该新的执行计划,则要把该新的执行计划与plan baseline里现存的第二次执行SQL时的执行计划进行比较, 如果新的执行计划成本更低,则会使用新的执行计划,否则使用plan baseline里的执行计划。

2.2 DBMS_SPM

  使用该包,可以直接将SQL的执行计划从shared pool里加载到plan baseline里,也可以使用dbms_spm包将已经存在的SQL Tuning Set加载到plan baseline里。

同时,dbms_spm可以让你把plan history里的执行计划加入到plan baseline里。反之,也可以使用该包将plan baseline里的执行计划移出去。

  注意,某条SQL语句的plan baseline里的第一个执行计划可以像上面说的通过设置初始化参数来自动加入,但是如果你希望在plan baseline里添加该SQL语句的其他新的执行计划时,则必须使用dbms_spm包手动完成。

3.plan baseline里的执行计划是如何被使用的

  OPTIMIZER_USE_PLAN_BASELINES参数缺省为true,表示要求优化器考虑使用plan baseline里的执行计划,如果设置为false,则不使用执行计划管理的特性,而又回到了11g之前的状况。

  场景:以下描述基于的前提是plan baseline里已经存在了一个SQL的执行计划.

  每次优化器解析SQL语句的时候,首先仍然使用11g之前的传统方式产生一个成本最低的执行计划,然后看初始化参数:OPTIMIZER_USE_PLAN_BASELINES.

  1. 如果为false,则直接返回所生成的执行计划。
  2. 如果为ture, 则去plan history里找是否存在相同的执行计划:
    • 如果找到了,则去plan baseline里找相同sql的执行计划做对比,看哪个执行计划的成本低就取哪个执行计划
    • 如果没找到,则将产生的执行计划加入到plan history里,然后将执行计划与plan baseline里已经存在的执行计划进行比较,看哪个执行计划的成本低就取哪个执行计划。

整理自网络:http://tech.it168.com/db/2007-07-23/200707231104640.shtml

时间: 2024-11-07 15:53:33

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

Oracle 11g 执行计划管理概述

以下内容来源于:http://www.51cto.com/art/200806/76223.htm 35.2  执行计划管理 35.2.1  概述 同一SQL语句的执行计划可能因为优化器的版本.优化统计.优化参数.系统设置的不同而不同.而SQL语句的执行计划自动改变,通常情况下会带来性能提升,但是在某些情况下可能导致系统性能的下降.在11g之前,DBA使用存储大纲(Stored Outline)和SQL 概要(Profile)来固定某些SQL语句的执行计划,防止因为系统自动更改执行计划而导致的性

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