2010-04-30 1055 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