Oracle 高风险锁等待快速诊断手册

一、手册使用说明

1.1 适用场景

  • 生产库出现会话阻塞、业务卡顿、事务超时
  • 监控工具(如OEM、Zabbix)告警“锁等待次数突增”“Concurrency等待占比超20%”
  • 出现高风险锁事件(如enq: CI - contentionenq: TX - allocate ITL entry

1.2 前置条件

  • 具备SYSDBASELECT ANY DICTIONARY权限(需查询v$动态视图)
  • 已安装Oracle客户端(如SQL Developer、PL/SQL Developer)或可访问数据库命令行
  • 了解业务核心表(如订单表、支付表)的表名与用途

二、快速诊断四步法

第一步:识别当前锁等待会话(2分钟)

目标:快速找到“等待锁的会话”和“持有锁的会话”,明确阻塞关系。

执行SQL
SELECT -- 等待方信息 w.sid AS 等待会话ID, w.serial# AS 等待会话序列号, w.username AS 等待用户, w.program AS 等待进程, w.machine AS 等待机器, w.event AS 锁等待事件, -- 持有方信息 h.sid AS 持有会话ID, h.serial# AS 持有会话序列号, h.username AS 持有用户, -- 锁详情 l.type AS 锁类型, l.id1 AS 锁资源ID1, l.id2 AS 锁资源ID2, o.object_name AS 涉及对象名, o.object_type AS 对象类型 FROM v$session w JOIN v$lock l ON w.sid = l.sid LEFT JOIN v$session h ON l.block = 1 AND l.id1 = (SELECT id1 FROM v$lock WHERE sid = h.sid AND block = 1) LEFT JOIN dba_objects o ON l.id1 = o.object_id WHERE w.wait_class = 'Concurrency' -- 仅筛选并发类锁等待 AND w.status = 'ACTIVE' -- 排除非活跃会话 ORDER BY w.event, w.sid;
关键判断
  • 持有会话ID不为空:存在明确的阻塞源,优先处理持有会话
  • 涉及对象名不为空:锁定对象为表/索引,需关联业务判断影响范围
  • 锁等待事件包含enq:前缀:属于Oracle内置锁,需对照“高风险锁速查表”处理

第二步:分析锁等待链(3分钟)

目标:排查是否存在“多会话循环等待”(死锁)或“长链阻塞”(A等B、B等C)。

执行SQL(死锁检测)
-- 1. 查看最近死锁信息(需数据库开启死锁跟踪) SELECT dt.username, dt.sid, dt.serial#, dt.object_name, dt.mode_held, dt.mode_requested, dt.lock_type, dt.deadlock_time FROM dba_deadlocks dt ORDER BY dt.deadlock_time DESC; -- 2. 查看完整锁等待链 WITH lock_chain AS ( SELECT l.sid AS waiter_sid, l.block AS holder_sid, l.type AS lock_type, l.id1, l.id2, 1 AS level FROM v$lock l WHERE l.request > 0 -- 等待锁的会话 UNION ALL SELECT l.sid AS waiter_sid, l.block AS holder_sid, l.type AS lock_type, l.id1, l.id2, lc.level + 1 AS level FROM v$lock l JOIN lock_chain lc ON l.sid = lc.holder_sid WHERE l.request > 0 ) SELECT lc.level AS 阻塞层级, lc.waiter_sid AS 等待方ID, s1.username AS 等待方用户, lc.holder_sid AS 持有方ID, s2.username AS 持有方用户, lc.lock_type, lc.id1, lc.id2 FROM lock_chain lc LEFT JOIN v$session s1 ON lc.waiter_sid = s1.sid LEFT JOIN v$session s2 ON lc.holder_sid = s2.sid ORDER BY lc.level DESC;
关键判断
  • 阻塞层级超过3:属于长链阻塞,需从顶层持有会话开始处理
  • dba_deadlocks有结果:存在死锁,需优先终止“非核心业务”的持有会话

第三步:定位锁等待根因(3分钟)

目标:根据锁类型和关联对象,判断是“参数配置问题”“SQL优化问题”还是“业务逻辑问题”。

核心根因判断逻辑
锁类型/事件常见根因验证SQL
enq: TX - allocate ITL表/索引的ITL(事务槽)不足SELECT ini_trans, max_trans FROM dba_tables WHERE table_name = 'XXX';
enq: TX - index contention索引频繁拆分(如自增主键索引)SELECT index_name, leaf_blocks, distinct_keys FROM dba_indexes WHERE table_name = 'XXX';
enq: CI - contention数据库健康检查异常(如内存泄漏)SELECT * FROM v$database_block_corruption;(检查数据块损坏)
enq: DF - contentionRAC环境数据文件 ONLINE/OFFLINE 异常SELECT name, status FROM v$datafile;(检查数据文件状态)
enq: WL - contentionREDO日志归档延迟或日志文件不足SELECT group#, status, bytes FROM v$log;(检查REDO日志状态)
关键操作
  • 若涉及表/索引:用dba_tables/dba_indexes查ITL、分区、碎片化情况
  • 若涉及RAC:用gv$session/gv$lock查跨节点阻塞(加INST_ID字段)
  • 若涉及REDO:用v$log/v$archive_dest_status查归档是否正常

第四步:评估业务影响(2分钟)

目标:判断锁等待是否影响核心业务,决定处理优先级。

执行SQL(关联业务会话)
SELECT s.sid, s.serial#, s.username, s.program, s.module, -- 业务模块(如“订单系统”“支付接口”) s.action, -- 具体操作(如“下单”“退款”) s.sql_id, -- 执行的SQL ID s.last_call_et AS 等待时长(秒), l.event AS 锁等待事件 FROM v$session s JOIN v$lock l ON s.sid = l.sid WHERE s.wait_class = 'Concurrency' AND s.module IN ('核心订单模块', '支付接口') -- 替换为实际核心业务模块 ORDER BY s.last_call_et DESC;
优先级判断
  • 高优先级:核心业务(如支付、下单)阻塞超5分钟,影响用户操作
  • 中优先级:非核心业务(如报表、统计)阻塞超30分钟
  • 低优先级:内部维护操作(如备份、索引重建)阻塞

三、高风险锁分类诊断速查表

锁类别锁事件(Event)核心特征诊断SQL临时解决方案长期优化建议
数据库健康类enq: CI - contention持续出现→系统健康异常SELECT * FROM v$instance;(查实例状态)
SELECT * FROM v$sgastat WHERE name LIKE '%leak%';(查内存泄漏)
1. 重启异常实例
2. 联系Oracle Support
1. 定期巡检实例健康
2. 及时安装PSU补丁
事务管理类enq: TX - allocate ITL entry并发更新同一表→ITL不足ALTER TABLE 表名 INITRANS 10;(临时调整)
SELECT ini_trans FROM dba_tables WHERE table_name = '表名';
1. 临时提升表/索引INITRANS
2. 终止长期持有会话
1. 按并发量设置INITRANS(建议10-20)
2. 表分区拆分
RAC环境类enq: DF - contentionRAC节点间数据文件状态不一致SELECT inst_id, name, status FROM gv$datafile;(查多节点数据文件状态)1. 在异常节点执行ALTER DATABASE DATAFILE '路径' ONLINE;
2. 重启节点
1. 规范数据文件操作流程
2. 避免跨节点频繁切换数据文件状态
REDO相关类enq: WL - contentionREDO归档慢/日志组不足SELECT dest_name, status FROM v$archive_dest_status;(查归档状态)
SELECT group#, status FROM v$log;
1. 临时增加归档进程(ALTER SYSTEM SET log_archive_max_processes=8;
2. 切换REDO日志
1. 增大REDO日志文件(建议2-4G)
2. 优化归档存储IO
分布式事务类enq: DX - contention分布式事务超时→锁未释放SELECT * FROM dba_2pc_pending;(查未完成分布式事务)
SELECT * FROM v$distributed_lock;
1. 手动清理 pending 事务(COMMIT FORCE '事务ID';
2. 终止异常分布式会话
1. 缩短分布式事务时长
2. 增加分布式锁超时(DISTRIBUTED_LOCK_TIMEOUT=300

四、应急处理流程

4.1 紧急场景(核心业务阻塞)

  1. 终止持有会话(需确认会话无关键事务):
    -- 先验证会话操作(避免误杀) SELECT sql_text FROM v$sql WHERE sql_id = (SELECT sql_id FROM v$session WHERE sid = 持有会话ID); -- 终止会话(sid=持有会话ID,serial#=持有会话序列号) ALTER SYSTEM KILL SESSION '持有会话ID,持有会话序列号' IMMEDIATE;
  2. 释放锁资源
    • 若为ITL问题:临时调整表/索引INITRANS
    • 若为死锁:通过dba_deadlocks定位后,优先终止非核心会话

4.2 非紧急场景(非核心业务阻塞)

  1. 收集诊断数据
    • 导出AWR报告(锁定时间段):@$ORACLE_HOME/rdbms/admin/awrrpt.sql
    • 导出ASH报告(实时数据):@$ORACLE_HOME/rdbms/admin/ashrpt.sql
  2. 根源分析
    • 用AWR报告“Top 5 Timed Events”确认锁等待占比
    • 用ASH报告“Top SQL”定位导致锁等待的SQL语句
  3. 优化处理
    • 优化SQL(如加索引、调整WHERE条件)
    • 调整业务逻辑(如错峰执行高并发操作)

五、注意事项与禁忌

  1. 禁止操作
    • 不确认业务影响时,禁止直接KILL SESSION(可能导致事务回滚、数据不一致)
    • 禁止在 peak 时段修改INITRANS、重建索引(可能引发新锁等待)
  2. 必做检查
    • 终止会话前,需通过v$session.sql_id确认会话执行的SQL是否为“非关键操作”
    • 修改参数(如log_archive_max_processes)前,需记录当前值(便于回滚)
  3. 日志留存
    • 每次锁等待问题处理后,需留存“诊断SQL结果”“AWR/ASH报告”“处理步骤”,形成知识库

附录:常用诊断视图说明

视图名称核心用途关键字段
v$session查看会话状态与等待事件sid(会话ID)、event(等待事件)、username(用户)、sql_id(SQL ID)
v$lock查看锁资源持有与等待情况sid(会话ID)、type(锁类型)、block(是否阻塞)、id1/id2(锁资源ID)
dba_objects查看锁定对象(表/索引)信息object_id(对象ID)、object_name(对象名)、object_type(对象类型)
dba_deadlocks查看历史死锁记录deadlock_time(死锁时间)、sid(会话ID)、object_name(涉及对象)
gv$sessionRAC环境查看多节点会话v$sessionINST_ID(节点ID)字段

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1119500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从“经验驱动”到“系统智能”:实体门店经营的结构性升级

当前实体经营领域,普遍存在一个深层挑战:许多门店尽管在工具、设备乃至营销手段上不断更新,但其核心经营逻辑仍停留在较为传统的模式。获客依赖广告与促销,服务依靠人员经验与话术,客户离店后关系难以持续,…

UVM-phase中的object机制

在class uvm_phase extends uvm_object中1. 类的作用和结构这个类是 uvm_phase,它管理测试平台中阶段的 objection 机制。UVM 使用 objection 机制来控制仿真的执行时间,防止测试提前结束。核心成员:systemveriloguvm_objection phase_done; …

AI+IoT双轮驱动:构建风电设备预测性维护数字孪生体的全栈技术实践

凌晨三点,内蒙古某大型风电场运维主管王工接到SCADA系统告警:“#23风机异常停机”。他迅速调取振动频谱图,却发现数据杂乱无章——是主轴承即将失效?还是传感器松动导致误报?抑或只是电网波动引发的瞬时保护动作&#…

UE5 C++(7):

(31) (32) 谢谢

企业落地 ChatBI,如何构建可信可靠的数据底座?

在企业 ChatBI 落地过程中,数据底座的技术路线选择直接决定了数据可信度、维护成本和业务响应速度。传统宽表架构在数据口径一致性、维护成本和灵活性上已难以支撑企业级 ChatBI 的规模化应用,而基于 NoETL 明细语义层的方案正成为新一代数据底座的主流选…

亲测好用8个AI论文写作软件,本科生搞定论文不求人!

亲测好用8个AI论文写作软件,本科生搞定论文不求人! AI 工具如何让论文写作变得轻松高效 在当今这个信息爆炸的时代,本科生的论文写作任务日益繁重,尤其是在面对大量文献阅读、数据分析和文字表达时,许多同学都会感到力…

UE5 C++(6-2):描述角色 EndPlay 原因的枚举类 EEndPlayReason::Type,此命名空间里定义了一个枚举类。

(30)描述角色 EndPlay 原因的枚举类 EEndPlayReason::Type :(31) 谢谢

基于IEEE33节点配电网的分布式电源与电动汽车接入潮流计算研究:考虑风光时序特性与电动汽车出...

含分布式电源和电动汽车的配电网潮流计算 考虑风光以及电动汽车的出力时序特性 建立风光电动汽车接入的潮流模型 基于IEEE33节点配电网,采用牛拉法求解得到接入之后的潮流分布。引言 随着可再生能源与新型用电负荷的快速发展,现代配电网正经历从“被动”…

双馈风力发电机直接功率控制的Simulink Matlab模型探索

双馈风力发电机直接功率控制simulink Matlab模型 采用直接功率控制的矢量控制策略在风力发电领域,双馈风力发电机(DFIG)因其独特的优势被广泛应用。而直接功率控制(DPC)作为一种高效的控制策略,为DFIG的稳定…

【珍藏干货】零成本打造智能文档问答系统!Everything plus RAG实战:让AI帮你从海量文档中精准找答案

本文介绍了一个基于RAG技术的开源智能文档问答系统"Everything plus",结合BM25关键词检索与向量检索技术,实现从海量文档中精准查找答案。系统采用三层架构,支持30种文件类型扫描,包含混合检索、RRF融合算法、查询重写和…

基于springboot的美食分享平台网站设计实现

技术背景SpringBoot作为Java生态中广泛使用的框架,简化了传统Spring应用的配置和部署流程。其自动配置、内嵌服务器和依赖管理特性,使得开发者能快速构建高可用的Web应用。在美食分享平台场景中,SpringBoot的高效开发模式适合处理用户生成内容…

脉脉独家【AI创作者xAMA】| 多维价值与深远影响

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C知识分享》 《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 前言:一、对AI创作者的个…

CSDN技术变现指南:从0到1开启知识创富之路

一、开篇:CSDN,技术人的变现宝藏在当今数字化浪潮中,技术更迭日新月异,CSDN 作为中国最大的技术社区之一,自 1999 年成立以来,一直是技术人交流、学习与成长的核心阵地。它见证并推动了中国 IT 行业的蓬勃发…

AI 写论文哪个软件最好?虎贲等考 AI 凭 “学术闭环” 登顶首选

毕业季的论文攻坚战,“AI 写论文哪个软件最好” 成了学子圈的终极拷问。有的软件文献引用虚拟无据,有的 AI 痕迹明显被导师打回,有的功能碎片化需反复切换工具 —— 真正靠谱的 AI 写作软件,不仅要 “写得快”,更要 “…

初学者通关指南:聚焦信息安全中的网络安全,一文厘清关键技术与概念

一、网络安全基础 OSI参考模型与TCP/IP开放模型对比 应用层 应用层 TehnetHTTPSMTPFTP DNSTFTPSSH 表示层 会话层 传输层 传输层 TCPUDP网络层 网络层 IP协议簇(RIP、OSPF、SNMP、ICMP) 数据链路层 物理和数据链路层 以太网 令牌…

虎贲等考 AI:重新定义学术写作,全流程智能赋能科研新生态

在学术探索的道路上,从选题构思到答辩收官,科研工作者与学子常面临文献搜集繁琐、数据支撑薄弱、格式规范复杂、查重降重棘手等多重困境。虎贲等考 AI 作为一款基于前沿人工智能技术打造的专业论文写作辅助工具,以 “全流程覆盖、高专业保障、…

BMI270,高性能高性价比的运动传感器, 现货库存

BMI270 是一款高性能、低功耗的 6 轴惯性测量单元 (IMU),集成了高精度三轴加速度计和陀螺仪,并具备智能运动触发中断功能,为各种高性能应用提供了可靠且经济的解决方案。高性能特点 高精度传感器: BMI270 的加速度计和陀螺仪均具有…

网络安全其实很简单!零基础就能读懂的五大关键技术,颠覆你的认知

网络安全技术是保护网络不受未经授权访问、破坏或盗取信息的重要手段。以下是五种零基础也能看懂的网络安全技术: 1.防火墙技术:防火墙是一种网络安全设备,用于监控和控制进入或离开网络的流量。它可以识别不安全的数据包,并阻止…

adb wifi连接!

以下是具体操作流程: 准备工作 同网络:确保电脑和手机连接在同一个 WiFi 网络下。 ADB 工具:确保电脑上已经安装了最新版的 platform-to ols (ADB 工具包)。 第一步:配对 (Pairing) 这一步通常只需要做一次,以后连接同一台电脑不需要再次配对。 手机端操作: 进入 设…

前端调用a服务,a服务将请求用controller+openfeign调用b服务,接口参数中有header参数和body,a服务应该怎么设置,才简单

在 Spring Cloud 中使用 OpenFeign 调用服务,处理 header 和 body 参数的简单设置方法:1. 最简单的配置方式1.1 定义 Feign 客户端接口FeignClient(name "b-service", url "${b-service.url}") public interface BServiceClient {…