oracle为每个存储过程显示执行时间

时间:2010-04-30 10:13:23

标签: oracle stored-procedures logging

我正在处理存储过程。在这一个内部,有许多调用其他存储过程。有很多。

我想知道是否有一个选项可以让每个存储过程的执行时间,每个函数(具有开始和结束时间,或类似的东西)。

我的想法是我需要优化它,我应该触及每个部分,因为我不知道最长的执行时间在哪里,有点困难。经过修改后,我希望看到孔过程是否更短。 如果我从unix调用该过程,使用sql plus,我没有日志。 如果我从TOAD调用它,它会被阻止直到结束。

有什么想法吗?

我不是dba,所以我对数据库没有很多权利,我只是普通用户。

2 个答案:

答案 0 :(得分:3)

如果您使用的是Oracle 11g,则应查看the built-in Hierarchical Profiler。它几乎完全符合你的建议。不幸的是,默认情况下,DBMS_HPROF的权限未授予PUBLIC,因此您需要让DBA授予您EXECUTE权限。因为它可以帮助你进行调整,我相信他们只是很乐意遵守。

答案 1 :(得分:0)

我已经看到了与事务无关的日志记录过程(PRAGMA AUTONOMOUS_TRANSACTION;),并且是从主程序调用的。它保存在funtime_log表中:

  • 当前时间(挂钟),
  • 序号,
  • thread(session)id,
  • 和文本(例如程序名称)

通过这种方式,您可以选择按顺序编号排序的一个会话中的所有事件,并查看时间差异最大的位置。在生产环境中,您只需使此功能无效即可禁用日志记录。