oracle SQL计划管理 1

从11.1版本开始,SQL计划管理(SPM)取代了存储概要。其实,可以将SQL计划管理看作是存储概要的增强版。实际上,它们之间不仅具有相同的特性,并且SQL计划管理也具有同样的设计目的,即使执行环境或对象统计信息发生改变,也可以提供稳定的执行计划。此外,与存储概要一样,SQL计划管理也可以在不修改应用的情况下对应用进行优化。

警告 Oracle文档中唯一提到的SQL计划管理的用法是稳定执行计划。并未提及在不修改提交SQL语句的应用的情况下使用SQL计划管理来改变当前的执行计划(与某个给定的SQL语句相关),出于某些原因,我也选择忽略该功能。

下面是SQL计划管理包含的关键元素。

Ø  SQL计划基线:用来稳定执行计划的实际对象。

Ø  语句日志:之前执行过的SQL语句列表。

Ø  SQL管理基础(SMB):存储SQL计划基线和语句日志的位置。需要的空间是在sysaux表空间中分配的。

1.1.1      工作原理

1.1.1.1   什么是SQL计划基线

SQL计划基线是用来影响查询优化器生成执行计划的对象。更具体一点,SQL基线包含了一个或多个执行计划,而执行计划里包含一组hint。基本上,SQL计划基线用于强迫查询优化器针对给定SQL语句生成特定的执行计划。

警告 并不是所有的hint都会存储在SQL计划基线中。可以执行下面的查询来查明不会存储哪些hint:

select name FROM v$sql_hint WHERE version_outline IS NULL;