获取查询的运行时执行计划
Posted
技术标签:
【中文标题】获取查询的运行时执行计划【英文标题】:get runtime execution plan of a query 【发布时间】:2013-01-23 12:55:02 【问题描述】:我有一个执行一些 sql 查询的应用程序。如何从 sqlplus 或其他 Oracle 客户端获取当前执行查询的执行计划?如果有必要,我可以修改应用程序中使用的 oracle 会话。
我不想使用explain plan
并手动执行该查询,我需要获取用于查询的实际执行计划。
【问题讨论】:
【参考方案1】:您可以对来自 SGA 的历史查询运行 explain plain -examples
然后列出 B。
例子:
SELECT username, prev_sql_id
FROM v$session
WHERE username = 'RDEVALL' -- example user
返回的 SQL ID
RDEVALL a1d4z5ruduzrd
RDEVALL avmbutuknvb6j
RDEVALL 75g0tqd9x743y
RDEVALL 5fnkh6c8mqqt3
RDEVALL 75g0tqd9x743y
选择查询 ID 并在此处使用:
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('a1d4z5ruduzrd')); -- replace with sql ID as needed
【讨论】:
此外,您可以根据其他搜索条件查询 v$session,例如机器名称、程序名称等,如果这对确定要定位哪个 SQL 语句更有意义。运行 DESC V$SESSION 以查看所有相关列。 DBMS_XPLAN.DISPLAY_CURSOR() 有问题。我有两个用户在两个不同的会话中运行相同的查询。由于查询相同,因此两个会话中查询的哈希键相同。调用DBMS_XPLAN.DISPLAY_CURSOR(以上是关于获取查询的运行时执行计划的主要内容,如果未能解决你的问题,请参考以下文章
sql 在运行查询和在存储过程中运行该查询时使用不同的执行计划?