oracle中通过存储过程定位sql的方法
工作中遇到不少开发跑过来,急匆匆的说我的存储过程执行好慢帮忙看看是哪里慢的情况。
抛开锁阻塞,存储过程执行缓慢大概率是其中的sql 语句执行缓慢,那么怎么样快速定位到是哪个sql 执行有问题呢,或者是找到了有问题的sql 需要调整,怎么告知开发有问题的sql 是属于哪一个存储过程,相信日常工作中dba 都会遇到这样的问题。主要有以下方式:
1、通过v$active_session_history 结合 v$sql 视图定位存储过程与sql 语句之间的关系
首先定位存储过程的sql_id,可以通过存储过程名称模糊查询,一般类似 BEGIN 存储过程名称 EDN,通过like 匹配查询v$sql 视图
select sql_id,sql_text from v$sql t where t.SQL_TEXT like ‘%存储过程名称%’
找到存储过程sql_id 后,通过v$active_session_history 视图查找存储过程包含的sql 语句的sql_id
select distinct t.SQL_ID,t.TOP_LEVEL_SQL_ID from v$active_session_history t where t.TOP_LEVEL_SQL_ID='&存储过程sql_id'
拿到sql 语句的sql_id 后 结合v$sql_monitor 、v$sql_plan_monitor、DBA_HIST_SQLSTATS、DBA_HIST_SNAPSHOT就能分析到哪些sql 语句执行时间最长、执行计划有无问题、执行计划有无发生变化准对具体的sql 语句进行优化、调整。
2、通过OEM 快速定位sql 语句与存储过程之间的联系
打开OEM Top Activity Top SQL页面,一般执行速度慢的sql 都能看到,点击排在前面的sql_id 超链接
打开 sql details 页面,点击统计信息,就能看到sql 属于哪个存储过程在调用、sql 执行速度、资源消耗情况:
本文来自博客园,作者:踏雪无痕2017,转载请注明原文链接:https://www.cnblogs.com/oradba/p/15704402.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)