OutLine使用-1
本人文档,如需转载,请注明出处!
最近开发人员老是和我说,现场数据库和测试数据库的执行计划不一样
测试数据库的执行计划还和开发数据库不一样
这事情,老板很生气,认为我们这数据库咋就不一样了列
要说公司的测试服务器也蛮多的,IBM和HP的都有列
所以就研究了下
发现这问题或许可以用过outln解决,如是就作了个小试验
以下是试验步骤,简单记录之:
测试环境:
HP DL380
Windows 2000 Advance Server
Oracle 8.1.7.4.1
首先,设置数据库的参数
QUERY_REWRITE_ENABLED=TRUE
STAR_TRANSFORMATION_ENABLED=TRUE
OPTIMIZER_FEATURES_ENABLE=8.0.6
然后把我要的表,用dbms_stats包分析下,索引和表都分析到
然后生成一个Outline
create or replace outline on sql_text
然后吗,
用dbms_stats.delete_table_stats把表的统计信息删除
dbms_stats.delete_index_stats把索引的统计信息删除
再看看sql_text的执行计划
果然不是俺想要的那个计划列
现在该干吗了
当然是设置参数 cursor_sharing=FORCE
好了,激动人心的时刻就要开始了,马上就能看到结果了
现在把参数
use_stored_outlines=TRUE 设置好
ok了,再看执行计划
果然是统计分析前的执行计划
如果把这个参数关掉
惨
执行计划又开始在那里猜测统计值了.
附注:
按照文档上说
如果想整个应用的outline都一样
也是可以作的
步骤大致如下:
1:授权给要创建outline的用户
2:使用alter session set create_stored_outlines=outln_name;
3:将整个应用按照实际应用的规模跑足够的时间;
4:使用alter session set create_stored_outlines=false;关闭创建的过程;
5:使用dbms_stats包分析所有的表
6:将optimize_mode设置为choose
7:用命令 alter session set use_stored_oulines=outln_name;
8:现在要作的就是尽量的跑整个应用了.
2 Comments to “OutLine使用-1”
Write a comment
You need tologin.

不错,学习了
最好能继续完善下:)
Let me introduce:
sharks ticket
Thanks for attention!