针对不同用户的甲骨文不同计划



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

我使用的是甲骨文 11g。

有一个查询由业务对象工具执行,优化器为不同的用户生成不同的计划。

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

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

问题是它不起作用。

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

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

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

源:

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

如果有另一个想法该怎么做..

我不会称这个问题为一个非常奇怪的问题。

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

简单原因是查询非限定表。

select * from TAB

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

下一种可能性是不同的优化程序启动参数,这些参数可能导致一个用户的优化程序可能使用其他用户禁止的功能。

我建议将 troubelshooting 对这两个查询执行 Oracle 10053 跟踪作为最简单的方法。

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

如果参数不是原因,您将在跟踪中看到执行计划中采用不同访问路径的详细信息。(了解10053痕迹的一个很好的介绍是我上面链接的沃尔夫冈·百年灵的论文)。

最新更新