如何确定 - >提高Oracle SP的性能

时间:2010-03-05 15:46:23

标签: sql performance oracle stored-procedures plsql

我们有很多SP,其中许多都需要永远执行。这些SP很长,很难通过SP查找哪个查询需要很长时间。

找出哪个查询占用时间最多的最佳方法是什么?这样我们就可以专注于那个问题而不是花时间研究。

目前我正在使用PL / SQL开发人员来执行SP

3 个答案:

答案 0 :(得分:2)

解释计划易于获取 - 它提供了对效率的洞察,这将转化为时间/资源。

如果您想真正了解存储过程,请查看使用tkprof运行跟踪。这是an article on it

答案 1 :(得分:2)

如果您能够执行查询,那么我建议您熟悉DBMS_PROFLIER功能。 Oracle PL / SQL Profiler是一个可以帮助提供有关PL / SQL代码的运行时行为的统计信息的工具。该工具在执行时收集有关PL / SQL源代码的信息,并将该信息存储在表中。执行完成后,您可以报告存储的探查器数据以确定:

  • 一行的总次数 执行
  • 最小值,最大值和平均值 每行代码的执行时间
  • SQL语句需要多长时间 执行完成
  • 代码覆盖率(实际行数 在分析期间执行)

对于Profiler运行总结了这一信息,您可以确定哪些源代码行或SQL语句可以从调优中获益最多。

DBMS_PROFILER包上的Oracle文档为here,为10g。

Metalink Doc 243755.1有一个脚本可以为分析运行生成漂亮的HTML输出。

PROFSUM.SQL是另一个报告收集数据的脚本,它可用here

答案 2 :(得分:1)

我做了很多这样的工作,我发现拥有一个好的测井工具是可行的方法。问题总是一个或多个SQL DML语句 - 尤其是UPDATES和DELETES。如果您创建一个简单的日志记录过程,该过程使用时间戳列写入表(使用AUTONOMOUS_TRANSACTION)并围绕所有SQL包装调用,您将非常快速地确定您的时间。我已经开发了一个成熟而复杂的软件包,专门用于检测这样的PL / SQL代码以及实时监控生产代码 - 如果您想要副本,请回复我。

可悲的是,大多数开发人员似乎认为DBMS_OUTPUT将解决问题 - 可以做到,但效率不高......或者很漂亮。

其他Oracle跟踪工具肯定也是一种帮助,但更难以使用。

最后 - 使用企业管理器并在一段时间内分析快照。查看前10个SQL查询 - 如果您喜欢使用SQL顾问程序。

希望有帮助...