针对不同用户的Oracle不同计划

时间:2018-01-31 09:03:55

标签: oracle optimization baseline

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

我使用的是Oracle 11g。

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

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

根据一个很好的计划(需要几秒钟)的事实,我试图强制优化器使用该计划。

问题在于它不起作用。

我尝试使用基线和sqlsets但是查询每次都使用不同的值绑定变量,所以当查询更改时它不会真正有用。

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

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

源:

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

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

1 个答案:

答案 0 :(得分:0)

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

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

琐碎的原因是查询不合格的表。

select * from TAB

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

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

对于两个查询,我建议作为一种最简单的麻烦方法来执行Oracle 10053 trace

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

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

相关问题