有啥方法可以在 oracle 数据库中找到长时间运行的过程/包块?

Posted

技术标签:

【中文标题】有啥方法可以在 oracle 数据库中找到长时间运行的过程/包块?【英文标题】:is there any way to find long running blocks of procedure/packages in oracle database?有什么方法可以在 oracle 数据库中找到长时间运行的过程/包块? 【发布时间】:2020-05-12 13:24:21 【问题描述】:

有没有办法在 oracle 数据库中找到长时间运行的程序/包块? 我需要调整 oracle 程序。 我不知道查询中的哪个 sql 需要很长时间,并且大约有 30 多个 sql 被调用。 有没有办法通过执行过程找出包/过程的长时间运行的sql?

【问题讨论】:

查看 V$SESSION_LONGOPS 和 v$sqlarea 视图 【参考方案1】:

是的,数据库中有一个分层分析器。启用它,运行您的 PL/SQL 包或过程,关闭分析器并查询 DBMSHP_* 表。它们会告诉您每次调用和每行的每个 SQL 语句花费了多少时间。它是用于调整 PL/SQL 的“转到”实用程序。

您可以在此处阅读 12c 文档:https://docs.oracle.com/database/121/ARPLS/d_hprof.htm#ARPLS146

【讨论】:

【参考方案2】:

有几个分析器和脚本可以查看数据库中的性能,特别是存储过程。一个较旧但仍然不错的读物在这里,http://www.dba-oracle.com/art_ioug_proc.htm

根据您运行脚本的技能和使用更高级的分析器,一个基本的选择是使用 Oracle 的 SQL Developer GUI 界面的 DBA 功能。基本上连接到运行存储过程的服务器,然后使用统计选项卡查看 CPU 性能和 I/O,统计选项卡也可以输出到日志中。这基本上是资源管理器信息。

https://docs.oracle.com/en/cloud/paas/exadata-express-cloud/csdbp/use-sql-developer-monitor-database-performance-ee.html#GUID-83539ADE-7D5A-49B7-80DA-AE1AA33B935A

您还可以根据需要使用 SQL Developer 来调试您的程序, https://docs.oracle.com/cd/E55747_01/appdev.41/e55591/sql-developer-concepts-usage.htm#f1_idecodeeditor_html

【讨论】:

以上是关于有啥方法可以在 oracle 数据库中找到长时间运行的过程/包块?的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以跟踪数据库中oracle函数插入的行

清理手机缓存每次都要花费很长时间,有啥办法可以快速清理吗?

有啥方法可以确定包在 Oracle 中是不是有状态?

有啥方法可以在 pyspark 数据框中找到包含数据的列数

有啥办法可以打破 foreach 循环?

有啥方法能将oracle中CHAR类型数据中的空格去掉