Oracle 锁对象与会话信息查询脚本详解

一、作用说明

1.1 锁对象与会话关联查询

作用:  
查询当前数据库中被锁定的对象信息,并关联对应的会话详情。可帮助DBA快速定位锁冲突源头。

核心视图

  • GV$LOCKED_OBJECT:存储被锁对象信息(全局视图,支持RAC)
  • DBA_OBJECTS:存储所有数据库对象元数据
  • GV$SESSION:存储当前所有会话信息(全局视图)

关键字段说明

  • Object_Name:被锁的对象名称
  • Machine:发起会话的客户端机器名
  • Sql_Id:会话正在执行的SQL ID
  • Sid/Serial#:会话标识符,用于后续操作(如kill session)
  • Client_Identifier:客户端标识符(常用于应用追踪)
  • Module/Action:应用程序注册信息(如代码模块名)

1.2 SQL执行统计查询

作用:  
统计SQL语句的执行性能指标,用于分析高消耗SQL。

核心视图

  • GV$SQL:存储所有SQL执行统计信息(全局视图)

关键指标

  • 总执行次数:SQL被执行的累计次数
  • 总耗时:SQL总执行时间(秒)
  • 平均耗时:单次执行平均时间(秒)
  • 硬解析次数:消耗较多资源的解析次数
  • 物理读/缓存读:I/O相关性能指标

二、查询代码

-- 锁对象与会话查询
SELECT 
    o.Object_Name AS 被锁对象名,
    s.Machine AS 客户端机器,
    s.Sql_Id AS 当前SQL_ID,
    s.Sid AS 会话ID,
    s.Serial# AS 会话序列号,
    s.Client_Identifier AS 客户端标识,
    s.Module AS 应用模块,
    s.Action AS 操作动作,
    s.Logon_Time AS 登录时间,
    s.Status AS 会话状态
FROM 
    Gv$locked_Object l 
    INNER JOIN Dba_Objects o ON l.Object_Id = o.Object_Id
    INNER JOIN Gv$session s ON l.Session_Id = s.Sid AND l.Inst_Id = s.Inst_Id -- 添加RAC实例关联
WHERE 
    o.Owner NOT IN ('SYS','SYSTEM') -- 排除系统锁
ORDER BY 
    o.Object_Name;

-- SQL性能分析
SELECT 
    Sql_Text AS SQL内容,
    Sql_Id AS SQL标识,
    Executions AS 总执行次数,
    ROUND(Nvl(Elapsed_Time, 0) / 1e6, 2) AS 总耗时_秒,
    ROUND(Elapsed_Time / NULLIF(Executions, 0) / 1e6, 4) AS 平均耗时_秒,
    Parse_Calls AS 硬解析次数,
    Disk_Reads AS 物理读,
    Buffer_Gets AS 缓存读,
    First_Load_Time AS 首次执行时间,
    Last_Active_Time AS 最后活跃时间
FROM 
    Gv$sql
WHERE 
    Executions > 0 -- 过滤未执行的SQL
    AND Last_Active_Time > SYSDATE - 7 -- 仅查7天内活跃SQL
ORDER BY 
    总耗时_秒 DESC;


<p data-source-line="81" class="empty-line final-line end-of-document" style="margin:0;"></p>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值