Oracle中如何获取函数中正在执行的真实SQL语句(定位存储过程中最耗时部分)

0    55    1

Tags:

👉 本文共约2608个字,系统预计阅读时间或需10分钟。

最近遇到开发反馈一个执行将近2天的存储过程,需要分析慢的原因,汇总记录一下。

通过v$session视图

v$session中的sql_id是一直变化的,所以就是存储过程中当前正在执行的真实SQL:

ash视图

如果v$ash视图中还有数据,尽量用这个,没有的话用dba_hist_ash

原理就是ash视图有top_level_sql_id(存储过程对应的sql_id),每个sql又有sql_exec_start,可以根据执行时间定位sql_id执行时间和次数。

再根据临时表 proc_run_time 做分析统计

缺点:

  • 当然这个统计结果没有dbms_profiler准确,但大致能看出来,并且不需要再次运行存储过程。
  • 如果是嵌套多层的存储过程,可能需要循环多次执行上面步骤
  • 需要自己写SQL分析,不够方便

10046 trace

可以通过disk 排序之类的方式,定位TOP SQL

缺点:

  • 需要再次执行一次存储过程;
  • 不高效,需要对disk 操作系统文件进行一定的grep 过滤 order by 人为查询

plsqldev工具

可以进行debug进行调试,或者进行如下的分析:

首先创建dbms_profiler包,而且还要创建一个用于存放跟踪信息的用户,及其prof表和序列的同义词,最后用profiler用户创建prof表和序列,并赋权。

下面将详细介绍在PLSQL DEVELOPER 应用Profiler:

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
Oracle中如何获取函数中正在执行的真实SQL语句(定位存储过程中最耗时部分)后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章!
验证码:
请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦。
  • 18509239930
  • 个人微信

  • DB宝
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部