首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle 10 G-拒绝/阻止CBO使用计划

Oracle 10 G-拒绝/阻止CBO使用计划
EN

Stack Overflow用户
提问于 2013-10-23 11:42:38
回答 2查看 47关注 0票数 0

在Oracle 10G中,有没有一种方法可以告诉CBO,它永远不应该考虑/拒绝特定的执行计划(如果我们知道PLAN Hash值,并且我们知道给定的计划总是会引发性能问题)。

同样,有没有办法告诉它一系列好用的计划?

EN

回答 2

Stack Overflow用户

发布于 2013-10-23 17:02:38

你不能“拒绝”特定的执行计划。但是您可以使用“存储大纲”来“强制执行”特定的执行计划。您只需让Oracle创建一组提示,这些提示将强制执行特定exec计划。但这应该被认为是最后的解决方案。这些概述有几个陷阱,比如

  • 应该在每次打补丁后重新生成
  • 如果您不能将它们嵌入到封闭源代码应用程序

中硬编码的SQL中,则可能需要强制执行登录触发器。

正确的索引、分区、动态采样或锁定表统计信息通常是更好的解决方案。

另外,如果您没有AWR的许可证,您仍然可以使用它的前身STATSPACK。如果您定期收集STATSPACK统计信息,则可以获得查询exec计划的历史记录,包括每个“历史”exec计划每次执行的平均buffer getsdisk reads

票数 1
EN

Stack Overflow用户

发布于 2013-10-23 12:12:39

使用“提示”来修改执行计划。有很多关于提示的信息,但我的经验是,CBO是动态的,而提示,一旦加入,性能总是相同的(如果数据发生重大变化,这是危险的,因为它们可能会长期降低性能)

以下是一个提示的示例:

代码语言:javascript
复制
select /*+ index(scott.emp,dept_idx) */ * from emp

在这里您可以了解更多关于它们的信息:http://docs.oracle.com/cd/B19306_01/server.102/b14211/hintsref.htm

根据我的经验,提示极大地增加了复杂SQL查询的运行时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19532379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档