SQL 计划管理是一种随Oracle Database 11g 引入的新功能,通过维护所谓的ldquo;SQL 计划基线(SQL plan baseline(11g))rdquo;来

一.概述

SQL 语句的SQL 执行计划发生更改时,可能存在性能风险。

SQL 计划发生更改的原因有很多,如优化程序版本、优化程序统计信息、优化程序参数、方案定义、系统设计和SQL 概要文件创建等。

在以前版本的Oracle DB 中引入了各种计划控制技术(如存储的大纲(storedoutline(9i))和SQL 概要文件等(SQLprofile(10g))),用于解决计划更改导致的性能回归。但是,这些技术都是需要手动干预的被动式进程。

SQL 计划管理是一种随Oracle Database 11g 引入的新功能,通过维护所谓的“SQL 计划基线(SQL plan baseline(11g))”来使系统能够自动控制SQL 计划演变。启用此功能后,只要证明新生成的SQL 计划与SQL 计划基线相集成不会导致性能回归,就可以进行此项集成。因此,在执行某个SQL 语句时,只能使用对应的SQL 计划基线中包括的计划。可以使用SQL 优化集自动加载或植入SQL 计划基线。

SQL 计划管理功能的主要优点是系统性能稳定,不会出现计划回归。此外,该功能还可以节省DBA 的许多时间,这些时间通常花费在确定和分析SQL 性能回归以及寻找可用的解决方案上。

二.SQL 计划基线(Plan BaseLine):体系结构

【数据库】Oracle 11g 新特性 -- SQL Plan Management 说明

SQL 计划管理(SPM) 功能引入了支持新计划的计划维护和性能验证所必需的基础结构和服务。

对于多次执行的SQL 语句,优化程序会为单个SQL 语句维护一个计划历史记录。优化程序通过维护语句日志来标识可重复的SQL 语句。如果对某个已记录的SQL 语句再次进行语法分析或再次执行该语句,则将该SQL 语句标识为可重复的语句。将某个SQL 语句标识为可重复之后,由优化程序生成的各种计划将作为包含相关信息(如SQL 文本、大纲、绑定变量和编译环境等)的计划历史记录得以维护;优化程序将使用这些信息来复制执行计划。

作为自动识别可重复SQL 语句及创建其计划历史记录的一种替代或补充,系统也支持为一系列SQL 语句手动植入计划。

计划历史记录包含优化程序在某段时间内为SQL 语句生成的不同计划。但是,只有计划历史记录中的部分计划可能被接受并得以使用。例如,正常情况下不会使用优化程序生成的新计划,,除非该计划得到验证不会导致性能回归。在维护窗口中作为自动化任务运行自动SQL 优化时,就会自动完成计划验证。

自动SQL 优化任务的唯一目标是获得高负载的SQL 语句。为此,该任务会自动执行一些操作,例如,使成功的已验证计划成为已接受的计划。一系列可接受的计划组成了一个SQL 计划基线(plan baseline)。为一个SQL 语句生成的第一个计划很显然是可接受的计划,因此,该计划形成了原始的计划基线。优化程序后来发现的任何新计划都包含在计划历史记录中,但最初都不包含在计划基线中。

语句日志、计划历史记录和计划基线都存储在SQL 管理库(SMB) 中;该库还包含SQL概要文件。SMB 是数据库字典的一部分,存储在SYSAUX 表空间中。SMB 使用自动空间管理(例如,定期清除未使用的计划)。可以对SMB 进行配置,以更改计划保留策略和设置空间大小限制。

注:使用OracleDatabase 11g 时,如果数据库实例已启动,但SYSAUX 表空间为OFFLINE,则优化程序将无法访问SQL 管理对象。这可能会影响某些SQL 工作量的性能。

【数据库】Oracle 11g 新特性 -- SQL Plan Management 说明