oracel 存储概要简单说明
1.1 存储概要
存储概要的作用是,在执行环境或对象统计信息中存在更改时,提供稳定的执行计划。为此,这个功能也称为计划稳定性(plan stability)。在Oracle文档中记录了体现该功能优势的两个重要场景。第一个是从基于规则的优化器(RBO)向基于成本的优化器(CBO)的迁移。第二个场景是将Oracle数据库升级到新版本。
在这两个场景中,目的都是在应用使用旧配置或版本时存储关于执行计划的信息,然后使用该信息来提供与新的配置或版本相同的执行计划。不幸的是,实际上即使正确地使用存储概要(stored outline),你仍能看到执行计划在改变。或许是由于这个原因,我从未见过哪个数据库大范围地使用存储概要。因此,实际上存储概要仅会用在某些具体的SQL语句上。
注意 从11.1版本之后,存储概要不再支持SQL计划管理(SQL plan management)
1.1.1 工作原理
1.1.1.1 什么是存储概要
存储概要是与SQL语句相关联的对象,其作用是在为SQL语句生成执行计划时影响查询优化器。更具体地说,存储概要是一组hint,或者更准确地说,是所有能强制查询优化器始终为给定SQL语句生成特定执行计划的hint组合。
注意 并不是所有hint都可以保存在存储概要中。要想知道不能保存哪些hint, 可以执行以下查询:
select name FROM v$sql_hint WHERE version_outline IS NULL;