2013-01-23 61 views
5

我有一個執行一些sql查詢的應用程序。我如何得到當前正在執行的查詢從sqlplus或其他oracle客戶端的執行計劃?如果需要,我可以修改應用程序中使用的Oracle會話。獲取查詢的運行時執行計劃

我不想使用explain plan並手動執行該查詢,我需要獲取用於查詢的實際執行計劃。

回答

10

您可以運行解釋平原從SGA歷史查詢 - 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 
+0

此外,您可以在其他搜索條件(如計算機名稱,程序名稱等)上查詢v $ session,如果這在確定要查找哪個SQL語句中更有意義。運行DESC V $ SESSION查看所有相關列。 – OldProgrammer

+0

我有一個DBMS_XPLAN.DISPLAY_CURSOR()的問題。 我有兩個用戶在兩個不同的會話中運行相同的查詢。由於查詢是相同的,查詢在兩個會話中的散列鍵是相同的。當調用DBMS_XPLAN.DISPLAY_CURSOR()時,怎麼沒有指定會話?我相信這個函數正在返回計劃執行計劃,而不是在特定會話中運行的實際執行計劃。 –