有啥方法可以在 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 数据库中找到长时间运行的过程/包块?的主要内容,如果未能解决你的问题,请参考以下文章