--source
dbms_stats.create_stat_table(
dbms_stats.export_table_stats(
--de
dbms_stats.create_stat_table(
copy from source
dbms_stats.import_table_stats(
概述
Oracle Outline是用来保持SQL执行计划(execution plan)的一个工具。我们可以通过outline工具防止SQL执行计划在数据库环境变更(如统计信息,部分参数等)而引起变化。
Outline的主要使用在以下情况:
1.
为避免在升级后某些sql出现严重性能下降而且在短时间内不能优化的情况,
我们可以使用outline的功能将原生产库中的sql执行计划实施在新的数据库上。
2.
为避免SQL的执行计划在统计数据不准确的情况(如未能及时收集表或索引的统计信息)下导致变化从而引起的性能降低。
3.
避免大规模分布实施的应用出现数据库版本、配置等区别引起的优化器产生不同的执行计划。
4.
某些Bug引起优化器生成较差的执行计划。在bug修复前我们可以使用outline来强制SQL的执行计划的正确。
Outline的机制是将所需要的执行计划的hint保存在outline的表中。当执行SQL时,Oracle会与outline中的SQL比较,如果该SQL有保存的outline,则通过保存的hint生成执行计划。
Outline的使用注意事项
Outline的使用需要注意以下事项。
1.
Outln用户是一个非常重要的系统用户,其重要性跟sys,system一样。在任何情况下都不建议用户删除outln,否则会引起数据库错误。
2.
优化器通过Outline生成执行计划前提是outline内所有hint都有效的。如:索引没有创建的前提下,索引的hint是失效的,导致该SQL的outline计划不会被使用。
3.
参数Cursor_sharing=force时不能使用outline。
4.
literial sql的共享程度不高,Outline针对绑定变量的sql较好。针对literial sql的情况,需要每条sql都生成outline。
5.
创建outline需要有create any outline的权限。
6.
要注意从CBO的角度来看,数据库表和索引的统计信息是随着数据量的变化而不断改变的。固定的执行计划在某些时段并不一定是最优的执行计划。所以outline的使用是要根据具体情况来决定的。
Outline使用举例
本文举例说明如何使用outline,并且将outline的内容从8i迁移到10g的数据库上使用。
操作步骤以scott用户为例说明。
8i,10g中在scott用户下创建测试表以说明outline的使用.
Login as scott
Create table t_test(col1 varchar2(2));
1.
确定8i生产库的db,listener处于关闭的状态。
2.
启动8i生产库instance.
3.
8i库使用system用户登陆,赋create any outline权限给sql执行用户。
Grant create any outline to scott;
4.
8i库使用scott用户登陆。
Create outline t_ol1 for category special on select * from t_test where col1=’00’;
T_ol1àoutline name
(注意每个outline都需要使用唯一的名字,不能重复)
Specialàoutline所属的类(category)
Select * from t_test where col1=’00’;à需要保存outline的sql
5.
10g,8i库Unlock并修改outlin用户口令。注意,outln用户的口令可以修改但是outln用户不能删除。
Alter user outln identified by outln account unlock;
6.
在8i库使用outln用户,导出outline数据。
Exp outln/outln tables=ol\$ ol\$hints file=ol.dmp log=ol_exp.log
将export的数据拷贝到10g库所在机器
7.
在10g库使用outln用户导入outline数据
imp outln/outln file=ol.dmp ignore=y log=ol_imp.log
8.
在10g库使用sys用户更新ouline的signature
connect sys/manager
exec dbms_outln.update_signatures;
启用stored outline
alter system set use_stored_outlines=special;
à指定outline category
9.
检测outline是否被使用
connect scott/tiger
create index I_test on t_test (col1);
à创建索引,以改变执行计划
explain plan for select * from t_test where col1=’00’;
@?/rdbms/admin/utlxplp
PLAN_TABLE_OUTPUT
Plan hash value: 4036493941
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------
| 0 | select STATEMENT | | 1 | 3 | 1200 (4) | 00:00:17 |
|*1 |TABLE ACCESS FULL | T_TEST | 1 | 3 | 1200 (4) | 00:00:17 |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("COL1"='00')
Note
-----
- outline "OL1" used for this statement
à
注意执行计划指出online已经使用
17 rows selected.
说明outline已经启用。
如果没有outline的情况下应该使用索引,执行计划如下。
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 614253159
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | select STATEMENT | | 1 | 3 | 3 (0) | 00:00:01 |
|* 1 | INDEX RANGE SCAN| I_TEST | 1 | 3 | 3 (0) | 00:00:01 |
---------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("COL1"='00')
Outline维护
停止db使用outline功能:
alter system set use_stored_outlines=false;
disable/enable具体outline:
alter outline ol_name disable;
alter outline ol_name enable;
删除outline category:
9i, 10g: exec dbms_outln.drop_by_cat(‘category_name’);
8i: exec outln_pkg.drop_by_cat(‘category_name’);
outline相关视图
dba_outlines
检查outline是否存在
select
name, category, owner from dba_outlines;
dba_outline_hints
该视图列出outline的hints内容
分享到:
相关推荐
最后,在应用阶段,SQL Optimizer在特定情况下可以自动将最优方案应用到原始代码,包括Send Back(直接返回)、Generate Script(生成脚本)以及结合Oracle Outline。无论代码是否可修改,都能通过SQL Optimizer将...
- **概要 (OUTLINE)**:用于优化器的提示信息,帮助优化查询计划。 - **资源限制 (Profile)**:用于限制用户的资源使用。 - **资源成本 (Resource Cost)**:衡量SQL语句的执行成本。 - **角色 (Role)**:集合了...
可以使用 stored outline 来稳定执行计划,stored outline 是 Oracle 中的一种机制,可以存储执行计划,并在下次执行时重复使用。 五、排序相关内存 排序相关内存是 Oracle 中的一种重要机制,它可以影响查询性能...
sr_plan看起来像Oracle Outline系统。 它可以用来锁定执行计划。 如果您不信任计划者或不能制定更好的计划,则很有必要。 编译安装 make USE_PGXS=1 make USE_PGXS=1 install 并修改您的postgres配置: shared_...
控制执行计划主要通过使用Oracle的提示(HINT)或OUTLINE来实现,以适应不同场景下的性能需求。 - **使用HINT**:HINT允许开发者直接干预Oracle优化器的决策过程,例如: - 改变表的连接顺序或连接方式。 - 使用...
王重东可能在笔记中介绍了如何分析执行计划、使用提示(Hint)、存储概要(Store Outline)、SQL计划基线等技术来优化SQL语句。 10. **表连接优化** 表连接是数据库操作中常见的复杂操作。笔记可能详细讨论了各种...
本文档介绍了在Oracle中固定执行计划的三种方法,分别是outline、SQLProfile和SPM(SQL Plan Management),并且着重讲解了SQLProfile和SPM的使用。 1. Outline方法 Outline是一种较老的技术,在Oracle的9i版本中就...
- **使用Outline**:创建一个固定的执行计划,确保每次执行都采用相同的计划。 通过以上内容的学习,我们可以了解到Oracle中高效SQL分析的重要性以及其实现方法。合理地运用这些技术和策略能够显著提高系统的整体...
15. **OUTLINE**:Outline是保存Hint的一种方式,它可以帮助在多个查询中重用相同的优化策略。 以上是Oracle Hint的一些主要知识点,具体应用时需结合实际的数据库环境和查询需求。在使用Hint时,应谨慎行事,因为...
另外,也可以创建 stored outline 来稳定执行计划。 Oracle 调优是一个复杂的过程,需要了解表结构、索引情况、SQL 语句的执行计划、连接方式、优化器、资源消耗等多个方面。只有通过不断的学习和实践,才能掌握 ...
此外,使用Stored Outline也是保持执行计划稳定的一种方法。 11. **排序内存调整**:在Oracle 8i中,sort_area_size和sort_area_retained_size控制排序内存,若内存不足,会使用临时表空间。而在Oracle 9i中,...
The authors first explain the key concepts underlying DBaaS, describe cloud computing implementations related to it, and outline the business and technology benefits. Next, they show how the Oracle ...
- **Outline**:用于优化器提示的元数据。 - **Profile**:用户账户的资源限制和密码策略。 - **Resource_Cost**:评估资源消耗的方法。 - **Role**:一组权限的集合。 - **类型**:自定义数据类型。 - **回滚...
- **Outline Manager**:大纲管理器,用于管理SQL执行计划。 - **Plan Change Analyzer**:计划变更分析器,用于分析SQL执行计划的变化。 - **Best Practices**:最佳实践,提供基于规则的数据库设计和编码推荐。...
根据提供的文档内容,本文将重点围绕“Oracle高效SQL分析”的核心知识点进行展开,具体包括SQL执行过程、数据读取方式、表连接实现方式以及如何通过提示和OutLine来调整和固定执行计划等内容。 ### Oracle高效SQL...
10. **稳定执行计划**:可以通过设置查询重写(query_rewrite_enabled)、星型转换(star_transformation_enabled)和优化器特性启用(optimizer_features_enable),以及创建和使用Stored Outline来固定执行计划,...
- OUTLINE MANAGER:轮廓管理器,用于管理SQL执行计划。 - PLAN CHANGE ANALYZER:计划变更分析器,用于分析SQL语句计划的变更。 - BEST PRACTICES:最佳实践检查,帮助用户遵循最佳实践。 - TOAD™ FOR ORACLE ...
- **Ctrl+O**: 快速显示Outline。 - **Ctrl+T**: 快速显示当前类的继承结构。 - **Ctrl+W**: 关闭当前Editor。 - **Ctrl+K**: 参照选中的Word快速定位到下一个。 - **Ctrl+E**: 快速显示当前Editor的下拉列表。...