一、作用说明
1.1 锁对象与会话关联查询
作用:
查询当前数据库中被锁定的对象信息,并关联对应的会话详情。可帮助DBA快速定位锁冲突源头。
核心视图:
GV$LOCKED_OBJECT
:存储被锁对象信息(全局视图,支持RAC)DBA_OBJECTS
:存储所有数据库对象元数据GV$SESSION
:存储当前所有会话信息(全局视图)
关键字段说明:
Object_Name
:被锁的对象名称Machine
:发起会话的客户端机器名Sql_Id
:会话正在执行的SQL IDSid/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>