我正在处理存储过程。在这一个内部,有许多调用其他存储过程。有很多。
我想知道是否有一个选项可以让每个存储过程的执行时间,每个函数(具有开始和结束时间,或类似的东西)。
我的想法是我需要优化它,我应该触及每个部分,因为我不知道最长的执行时间在哪里,有点困难。经过修改后,我希望看到孔过程是否更短。 如果我从unix调用该过程,使用sql plus,我没有日志。 如果我从TOAD调用它,它会被阻止直到结束。
有什么想法吗?
我不是dba,所以我对数据库没有很多权利,我只是普通用户。
答案 0 :(得分:3)
如果您使用的是Oracle 11g,则应查看the built-in Hierarchical Profiler。它几乎完全符合你的建议。不幸的是,默认情况下,DBMS_HPROF的权限未授予PUBLIC,因此您需要让DBA授予您EXECUTE权限。因为它可以帮助你进行调整,我相信他们只是很乐意遵守。
答案 1 :(得分:0)
我已经看到了与事务无关的日志记录过程(PRAGMA AUTONOMOUS_TRANSACTION;
),并且是从主程序调用的。它保存在funtime_log表中:
通过这种方式,您可以选择按顺序编号排序的一个会话中的所有事件,并查看时间差异最大的位置。在生产环境中,您只需使此功能无效即可禁用日志记录。