在 Oracle 11g 中获取实际执行计划

Posted

技术标签:

【中文标题】在 Oracle 11g 中获取实际执行计划【英文标题】:Getting Actual Execution Plan in Oracle 11g 【发布时间】:2013-01-30 03:14:45 【问题描述】:

我已经阅读了这篇post 和this 的优秀文章

我的问题是,如何在 Oracle 11g 中获得 acutual 执行计划

没有 sys 权限和 DBA 权限。 (您可以将我的案例视为只读用户)

我可以使用SYS.PLAN_TABLE$TOAD中的CTRL+E 获得解释计划

但我的理解是解释计划=仅估计执行计划?

在 Oracle 的文档中找到

执行计划可能因以下原因而有所不同:

不同的模式

不同的成本

请给我任何你能提供的帮助来清除我的概念。

【问题讨论】:

【参考方案1】:

如果你想使用dbms_xplan.display_cursor,你需要at least these grants:

grant select on sys.v_$sql_plan to larry;
grant select on sys.v_$session to larry;
grant select on sys.v_$sql_plan_statistics_all to larry;

您可能还需要V$SQL 才能找到SQL_ID

grant select on sys.v_$sql to larry;

【讨论】:

感谢您的提示,所以我必须从 DBA 获得对 SYS 表的这些权限? 还有一个问题。 dbms_xplan.display_cursor 的结果是查询中使用的实际执行计划? 是的。它可以显示几个“实际”列,让您可以将估计值与实际值进行比较。 如果 2 天内没有其他解决方法,我会接受这个答案。 我会选择这个答案,因为似乎没有其他解决方法,我希望获得最低权限。【参考方案2】:

如果您是开发人员,也许我可以请求授予您 SELECT_CATALOG_ROLE。在 11g 中授予它是无害的。这将允许对 DBA 拥有的大多数信息进行只读访问。

这将使您可以访问 v$sql_plan*、v$session_longops、V$lock、V$SQL_BIND_CAPTURE 和其他性能相关数据。

【讨论】:

这比授予单个表更方便。但我不认为你总是可以说它是无害的。这取决于组织。例如,许多组织不希望开发人员运行select password from dba_users;,即使密码已加密。如果用户在查询中包含敏感信息,即使 V$SQL 也可能存在问题。 是的,你是对的。我所说的“无害”是指在 9i 上具有此角色的用户可以看到 DBLINK 的明文密码。这不再是真的了。

以上是关于在 Oracle 11g 中获取实际执行计划的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 11g为SQL生成合适执行计划并固定

Oracle 11g为SQL生成合适执行计划并固定

ORACLE 11G SPM(SQL PLAN manager)浅析

获取查询的运行时执行计划

ORACLE从共享池删除指定SQL的执行计划

Oracle 11g 新特性 -- SQL Plan Management 说明