2010-07-21 37 views
1

TOAD或其他工具是否有辦法監控正在執行的查詢?如何監控Web應用程序數據庫查詢執行計劃?

我想檢查Web應用程序查詢的解釋/執行計劃。

我在調試爲什麼webapp查詢比從sqlplus運行時慢。

+0

您是否有證據表明查詢本身需要更長時間,還是來自前端的這種用戶體驗?我通常與開發人員一起工作,以測試他們的代碼,以顯示查詢執行的時間和檢索結果的時間,這通常讓我們更接近確定時間的花費。通常他們沒有效率的代碼來呈現結果,這就是「額外」時間的考慮因素。 – 2010-07-22 01:36:00

+0

良好的證明可能有點強烈的描述:-)但是,我在運行查詢的代碼中設置斷點,並且在應用程序中需要幾秒鐘,SQLPlus中只需幾毫秒 – 2010-07-22 02:20:17

回答

2

一般來說,您可以從三點進行跟蹤和分析。首先SQL,主要是通過v $ sql視圖。 其次通過會話(從v $ session開始)。 最後通過時間(通常在系統或會話級別測量一段時間)。

如果執行某個特定的SQL語句(例如SELECT * FROM table WHERE type =:val),那麼數據庫將對其進行快速散列並查看緩存中是否存在匹配的語句。該聲明不僅必須與文本匹配,還必須符合某些環境設置(例如解析用戶,優化程序目標,綁定變量類型,NLS設置...)。

如果沒有匹配的語句,那麼數據庫會將其饋送給優化器以提出查詢計劃。如果匹配,那麼已經爲該聲明確定的計劃將被使用。

所以我建議你的第一步是採取一個已經由web-app和sqlplus執行的SQL,並查看它是否使用相同的計劃。你應該能夠在v $ sql中查看感興趣的語句並查看它有多少次出現)。

如果您有多個事件,尤其是對於不同的MODULE/ACTION/SERVICE值,那麼您可以查看計劃以查看它們是否有差異(DBMS_XPLAN.DISPLAY_CURSOR)。如果您只有一次發生,那麼SQL將被共享,您需要採取不同的方法來隔離sqlplus執行中的web應用程序執行。

這樣做的一種方式是通過Web應用程序會話和sqlplus會話(DBMS_MONITOR)跟蹤SQL的執行情況。然後tkprof或類似的跟蹤文件,並尋找差異。

不能幫助你通過TOAD來完成它,但你不能錯誤地理解底層的工具和技術。

+0

非常感謝,非常感謝。鑑於v $ sql中的一行,你怎麼看到顯示計劃? – 2010-07-22 14:00:27

+0

假設10g或更高版本,v $ sql有一個sql_id列(值爲fdxrh8tzyw0yw)。您可以通過 select * from table(dbms_xplan。)查看解釋計劃。display_cursor( 'fdxrh8tzyw0yw')); – 2010-07-22 23:05:39

1

是的。有一種方法可以監視在Oracle TOAD中查詢數據庫的Web應用程序調用。

START -> All Programs -> Quest Software -> TOAD for Oracle -> Tools -> SQL Monitor 

有了這個工具,你選擇的過程(在這種情況下[TOAD, Web_dev (I dont remember the name of debug)]「運行」,「調試」太)。此工具顯示存儲過程或函數正在調用應用程序。