SQL执行计划固化问题

客户一条访问上千万记录的语句,因为统计信息的变动导致全表扫描访问,引起严重的主机性能问题,这个问题一方面通过更精确的统计信息更新,并且让语句首次执行时选择正确的执行计划;另一方面最好是能够固化执行计划,避免下次再发生意外。

这是oracle 9i的数据库,固化需要使用outline,虽然是淘汰的技术,但是特殊的运行环境还是需要,搜了一下相关资料,在测试环境中验证一下。



1、首先要激活使用outline

alter system set use_stored_outlines=true


2、基于目标语句创建一个outline

事先需要把create any outline权限赋给目标用户):

create or replace outline outline_emp01 on select count(*) from emp where empno=7300;

下面是原有的执行计划:



3、基于正确执行计划再创建一个outline

create or replace outline outline_emp02 on select /*+ full(emp) */ count(*) from emp where empno=7300;


4、下面把这两个outline所使用的hint做一个交换


用sys用户执行:



5、再看执行计划

发现已经是基于全表扫描了(实际环境是反过来,固定为走索引):

SQL> explain plan for select count(*) from emp where empno=7300;

SQL> select * from table(dbms_xplan.display);


下面语句可以查看outline的相关信息(outln用户或者sys用户身份执行):


作者,慕容荃

银信科技AIX/Oracle/TSM/Informix方面的资深技术专家。年少轻狂时致力于成为走过的每一个领域的专家;随着岁月老去,更看重在分享中寻获的快乐,从早年的aixchina.com到现在的银信微讲堂,一直在路上。工作之余,喜欢打牌,看电影,看科幻小说,也不排斥跑步打球出一身汗。

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
免责声明: IT学馆所发布的一切资源及文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。admin@itxueguan.com
数据库
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论