【问题标题】:Oracle different plans for different usersOracle针对不同用户的不同计划
【发布时间】:2018-07-10 07:57:42
【问题描述】:

我有一个非常奇怪的问题。

我使用的是 Oracle 11g。

Business Objects 工具执行了一个查询,优化器为不同的用户生成不同的计划。

当我的客户运行 BO 报告时,它真的很慢,但当我运行它时,它很快。

鉴于有一个很棒的计划(需要几秒钟),我尝试强制优化器使用该计划。

问题是它不起作用。

我尝试使用基线和 sqlsets,但查询每次都使用具有不同值的绑定变量,因此当查询更改时它并没有真正的帮助。

有没有办法禁用所有 sql 执行的计划? 这是一个糟糕的计划。但由于绑定变量,可能会带来很多查询。

更多,我在网上找到了有关 optimizer_secure_view_merging 的信息 可能导致此类问题的参数..但我很少有用户得到了好的计划,不仅是所有者..还可以吗?

来源:

https://oracledb.wordpress.com/2007/04/10/execution-plans-differents-with-different-users/

如果有其他想法该怎么做..

【问题讨论】:

  • 计划之间有什么区别?使用explain plan for ...select * from table(dbms_xplan.display); 生成它们并在此处添加它们可能会有所帮助。
  • 您检查过 MOS Doc ID 371581.1 吗?
  • @JSapkota 那是什么?
  • 这是 Oracle Support 提供的文档,似乎与您的问题有关。只有拥有 Oracle Support ID 才能访问它。
  • 我没有...他们在文档中说什么?

标签: oracle optimization baseline


【解决方案1】:

我不会称这个问题为很奇怪

有很多可能的原因导致不同用户对同一个查询有不同的行为。

一个微不足道的原因是查询一个不合格的表。

select * from TAB

此查询将为不同的用户访问不同的表。

下一种可能性是不同的Optimizer Initiation Parameters,这可能导致一个用户的优化器可能使用其他用户禁止使用的功能。

我建议将Oracle 10053 trace 用作两个查询的最简单的故障排除方法。

跟踪文件包含所用参数的完整列表,一个简单的差异可以提供有用的提示。

如果参数不是原因,您将在跟踪中看到执行计划中采用不同访问路径的详细信息。 (理解10053 trace的很好的介绍是我上面链接的Wolfgang Breitling的论文)。

【讨论】:

  • 感谢您的回答,我将应用跟踪.. 问题与别名无关.. 我知道。我认为跟踪的链接已损坏
  • @user2671057 好吧,如果问题是由(不同的)不合格的表引起的,我会感到惊讶-我只是为了完整性而提到它。该链接对我有用,但只需搜索 Oracle trace 10053A look under the hood cbo the 10053 event。如果你成功了,请告诉我。
猜你喜欢
  • 2018-11-28
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 2016-04-09
相关资源
最近更新 更多