【问题标题】:get runtime execution plan of a query获取查询的运行时执行计划
【发布时间】:2013-01-23 12:55:02
【问题描述】:

我有一个执行一些 sql 查询的应用程序。如何从 sqlplus 或其他 Oracle 客户端获取当前执行查询的执行计划?如果有必要,我可以修改应用程序中使用的 oracle 会话。

我不想使用explain plan 并手动执行该查询,我需要获取用于查询的实际执行计划。

【问题讨论】:

    标签: oracle oracle11g


    【解决方案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(),怎么不指定session呢?我相信这个函数返回的是计划的执行计划,而不是在特定会话中运行的实际执行计划。
    • @HansDeragon,你最好提供你所面临的场景的例子。它可以帮助更多地了解情况。
    猜你喜欢
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多