2012-06-01 91 views
1

我想弄清楚爲什麼插入和更新語句需要更長的時間在生產服務器上運行而不是測試服務器。我不知道如何去監控在SQL Developer中運行的塊的狀態。在插入這麼多行之後,像rownum plus sysdate的輸出就是一個好的開始。如何監視一個plsql塊語句

有沒有一種方法可以在塊運行時輸出dbms_output.put_line語句?

我目前在Oracle 11g上運行SQL Developer 3.1.07。

編輯補充SOLUTION:後的PL/SQL塊已經被執行,以便它們不適合而代碼運行查明問題

PROCEDURE log_timestamp (
    PI_trans_num number 
) IS 
    PRAGMA AUTONOMOUS_TRANSACTION; 
BEGIN 
    INSERT INTO timestamp_log (log_timestamp, trans_num) 
    VALUES (SYSTIMESTAMP, PI_trans_num); 
    COMMIT; 
END log_timestamp; 

回答

1

dbms_output.put_line語句僅被顯示。

如果您想跟蹤長時間運行的進程,您可以使用自主事務(因此您不會干擾當前事務)登錄到數據庫表並監視日誌記錄表。

採取另一種方法,您可以查看正在測試服務器和生產服務器上運行的插入和更新語句的解釋計劃。這可能會識別生產系統上的差異,這將解釋時間差異。

+0

感謝您的提示。我是否將自治事務的正確用法編輯爲子過程? – tp9

+0

看起來很好。 –

+0

今天早上測試一下。奇蹟般有效。再次感謝我正在尋找的東西。 – tp9

2

在逐行基礎上監視PL/SQL性能的更好方法之一是使用DBMS_Profiler,它將爲您提供每行的執行統計信息以及它執行的次數。

它當然不會診斷SQL執行問題,但它會突出顯示執行每個語句花費了多少執行時間。

+0

謝謝,這將有助於解決問題。我仍然需要autonomous_transaction來跟蹤塊語句,看看我是否需要殺死這個工作。沒有它,我很難估計聲明要運行多久。 – tp9

2

另一種方法是使用DBMS_Application_Info。

您可以通過設置「操作名稱」並通過v $ session_longops維護進度報告來將元數據添加到v $ session中的會話以共享進度。

+0

哇。感謝您指點我這個軟件包。這正是我所期待的。用於監視會話對象的內置功能。 – tp9