在 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 中获取实际执行计划的主要内容,如果未能解决你的问题,请参考以下文章