2010-04-30 65 views
0

我正在處理存儲過程。在這個內部,有很多調用其他存儲過程。有一堆他們。oracle顯示每個存儲過程的執行時間

我想知道是否有一個選項可以讓每個存儲過程的執行時間都涉及到每個函數(包括開始和結束時間,ior等)。

這個想法是,我需要優化它,我應該觸及每一個部分,因爲我不知道最長的執行時間在哪裏,有點困難。經過修改後,我希望看到鑽孔過程是否更短。 如果我從unix調用過程,使用sql plus,我沒有日誌。 如果我從TOAD調用它,它會被阻止直到結束。

有什麼想法?

我不是一個dba,所以我沒有很多數據庫權限,我只是一個普通用戶。

回答

0

我已經看到了與事務無關的日誌程序(PRAGMA AUTONOMOUS_TRANSACTION;),並從主程序中調用。它保存在funtime_log表:

  • 當前時間(掛鐘)
  • 序列號,
  • 線程(會話)ID,
  • 和文本(例如程序的名稱。)

這樣,您可以選擇按順序號排序的一個會話中的所有事件,並查看時間差異最大的地方。在生產環境中,您可以簡單地使此功能無需任何操作即可禁用日誌。

3

如果您使用Oracle 11g,則應該檢出the built-in Hierarchical Profiler。它幾乎完全是你打算做的。不幸的是,DBMS_HPROF的權限默認情況下不會授予PUBLIC,所以您需要讓您的DBA授予您EXECUTE權限。因爲它可以幫助你進行調整,所以我相信他們只會很樂意遵守。

+0

是的,這將是值得與您的DBA和使用DBMS_HPROF。輸出文件(plshprof)的分析程序也可以對兩次運行進行比較,並告訴你什麼變得更快,什麼變得更慢 - 這對確定調整變化後的位置至關重要。 – 2010-04-30 14:24:39

相關問題