Wrayの知识库 Wrayの知识库
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • 计算机基础
  • 操作系统原理
  • Linux
  • MacOS
  • Windows
  • 系统工程与研究专题
  • AI 基础
  • 大模型基础
  • Prompt 工程
  • RAG 检索增强生成
  • Agent 智能体
  • AI 应用开发
  • AI 工程化
  • AI 安全与治理
  • AI 面试与设计题
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • 计算机基础
  • 操作系统原理
  • Linux
  • MacOS
  • Windows
  • 系统工程与研究专题
  • AI 基础
  • 大模型基础
  • Prompt 工程
  • RAG 检索增强生成
  • Agent 智能体
  • AI 应用开发
  • AI 工程化
  • AI 安全与治理
  • AI 面试与设计题
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
  • 数据库概述
  • MySQL

  • Redis

  • Oracle

    • Oracle概述
    • Oracle版本与部署选型
    • Oracle安装配置与客户端工具
    • Oracle体系结构与实例数据库
    • Oracle内存结构SGA与PGA
    • Oracle进程与后台任务
    • Oracle存储结构与表空间
    • Oracle数据类型与字符集
    • Oracle Schema对象与数据建模
    • SQL基础与Oracle语法特性
    • PLSQL基础与包过程函数
    • Oracle事务与一致性读
    • Oracle锁闩锁与并发控制
      • 1. 学习目标与定位
      • 2. 核心概念总览
      • 3. 底层原理详解
      • 4. 关键机制拆解
        • 4.1. TX、TM 与行锁
        • 4.2. Enqueue、Latch 与 Mutex
        • 4.3. ITL 与热点块
        • 4.4. 死锁和阻塞链
      • 5. 功能模块细节补充
        • 5.1. TX Lock
        • 5.2. TM Lock
        • 5.3. Row Lock
        • 5.4. Enqueue
        • 5.5. Latch
        • 5.6. Mutex
        • 5.7. Deadlock
        • 5.8. ITL
        • 5.9. Wait Event
      • 6. 开发人员重点提醒
      • 7. 运维人员重点提醒
      • 8. 典型问题与排查
      • 9. 实践建议与检查清单
      • 10. 阶段小结
    • Undo Redo与归档日志
    • Oracle索引结构与设计
    • 执行计划与DBMS_XPLAN
    • 优化器统计信息与SQL调优
    • AWR ASH与性能诊断
    • Oracle等待事件与故障排查
    • RMAN备份恢复与闪回技术
    • Data Guard与灾备架构
    • RAC集群与服务高可用
    • ASM存储与文件管理
    • Multitenant CDB与PDB
    • 分区表与VLDB实践
    • 数据泵SQLLoader与数据迁移
    • Oracle安全审计与权限治理
    • Oracle开发连接池与JDBC实践
    • JSON向量与多模型能力
    • Oracle运维规范与面试设计题
目录

Oracle锁闩锁与并发控制

Oracle 并发控制既包括面向数据一致性的锁,也包括保护内存结构的 latch、mutex 和 enqueue。排查并发问题不能只看锁等待,还要理解等待事件和访问路径。

# 1. 学习目标与定位

维度 内容
难度层级 核心到排障
核心目标 从底层运行链路理解本篇主题,能把概念、SQL、指标、故障和工程取舍连起来
适合人群 开发人员关注热点更新、事务顺序和死锁;运维人员关注阻塞链、等待事件、闩锁和内存竞争。

# 2. 核心概念总览

Oracle锁闩锁与并发控制
├─ TX Lock
├─ TM Lock
├─ Row Lock
├─ Enqueue
├─ Latch
├─ Mutex
├─ Deadlock
├─ ITL
└─ Wait Event

这张图只用来定位本章范围。正文不会把每个词机械拆成固定问答,而是按 Oracle 的真实运行机制解释它们之间如何协作、在哪里影响开发、在哪里影响运维。

# 3. 底层原理详解

Oracle 行级锁在修改行时产生,通常不升级为表锁。TX 锁代表事务资源,TM 锁保护表级 DML/DDL 协调。锁等待和死锁通常来自业务访问顺序、索引缺失、外键无索引或热点行。

Latch 和 Mutex 不是业务数据锁,而是保护 SGA 内部结构的轻量同步机制。它们的等待往往说明共享池、缓存链、游标或热点块存在高并发争用。

排查并发问题要从等待事件和阻塞链入手。谁在等、等什么资源、谁持有、SQL 是什么、事务从何时开始,这些证据比“数据库卡了”更重要。

# 4. 关键机制拆解

# 4.1. TX、TM 与行锁

UPDATE/DELETE 会锁定被修改的行,其他会话修改同一行时等待 TX。TM 锁用于协调表级操作,例如 DML 与 DDL 之间的关系。未索引外键可能导致父表删除或更新时产生额外锁影响。

开发人员应保证热点业务有稳定访问顺序和合适索引。库存、余额、状态机这类更新要用条件更新和幂等键保护,不要先查后无条件覆盖。

# 4.2. Enqueue、Latch 与 Mutex

Enqueue 是排队式资源管理,覆盖事务、表、日志、空间等多类资源。Latch/Mutex 保护内存结构,等待时间通常很短,但高并发下会形成明显瓶颈。

library cache mutex、cache buffers chains latch 等等待通常指向硬解析、热 SQL、热点块或访问路径问题。调参前要先定位 SQL 和对象。

# 4.3. ITL 与热点块

ITL 是数据块中记录事务槽位的结构。高并发更新同一块内多行时,如果 ITL 不足或块空间不足,会出现 ITL 等待。递增主键插入、热点索引叶块也可能形成块级争用。

解决热点块不一定靠加机器。可能需要调整表/索引设计、反向键索引、分区、散列分布或业务削峰。

# 4.4. 死锁和阻塞链

Oracle 会自动检测死锁并回滚其中一个语句,但不会替开发人员修正访问顺序。死锁 trace 能告诉资源和 SQL,但根因通常在业务流程。

排查阻塞链要看 V$SESSION、V$LOCK、DBA_BLOCKERS/WAITERS、ASH 和 SQL_ID。不要只杀最终等待者,要找到持锁者和事务边界。

# 5. 功能模块细节补充

本节围绕概念图中的模块逐个补充底层细节,重点讲它们在 Oracle 运行链路中的位置和相互关系,而不是按固定角色模板拆分。

# 5.1. TX Lock

TX Lock 表示并发控制或内部同步资源。它可能保护业务行、表级 DDL/DML 协调、事务资源、内存结构或热点块;排查时要找到等待者、持有者、SQL_ID、对象和事务开始时间。

# 5.2. TM Lock

TM Lock 表示并发控制或内部同步资源。它可能保护业务行、表级 DDL/DML 协调、事务资源、内存结构或热点块;排查时要找到等待者、持有者、SQL_ID、对象和事务开始时间。

# 5.3. Row Lock

Row Lock 表示并发控制或内部同步资源。它可能保护业务行、表级 DDL/DML 协调、事务资源、内存结构或热点块;排查时要找到等待者、持有者、SQL_ID、对象和事务开始时间。

# 5.4. Enqueue

Enqueue 表示并发控制或内部同步资源。它可能保护业务行、表级 DDL/DML 协调、事务资源、内存结构或热点块;排查时要找到等待者、持有者、SQL_ID、对象和事务开始时间。

# 5.5. Latch

Latch 表示并发控制或内部同步资源。它可能保护业务行、表级 DDL/DML 协调、事务资源、内存结构或热点块;排查时要找到等待者、持有者、SQL_ID、对象和事务开始时间。

# 5.6. Mutex

Mutex 表示并发控制或内部同步资源。它可能保护业务行、表级 DDL/DML 协调、事务资源、内存结构或热点块;排查时要找到等待者、持有者、SQL_ID、对象和事务开始时间。

# 5.7. Deadlock

Deadlock 表示并发控制或内部同步资源。它可能保护业务行、表级 DDL/DML 协调、事务资源、内存结构或热点块;排查时要找到等待者、持有者、SQL_ID、对象和事务开始时间。

# 5.8. ITL

ITL 表示并发控制或内部同步资源。它可能保护业务行、表级 DDL/DML 协调、事务资源、内存结构或热点块;排查时要找到等待者、持有者、SQL_ID、对象和事务开始时间。

# 5.9. Wait Event

Wait Event 表示并发控制或内部同步资源。它可能保护业务行、表级 DDL/DML 协调、事务资源、内存结构或热点块;排查时要找到等待者、持有者、SQL_ID、对象和事务开始时间。

# 6. 开发人员重点提醒

  • 固定多资源更新顺序,减少死锁。
  • 热点行更新要有削峰、分片或条件更新策略。
  • 外键列和高频过滤列要评估索引。

# 7. 运维人员重点提醒

  • 建立锁等待和阻塞链查询脚本。
  • 保留死锁 trace 并关联应用请求。
  • 区分业务锁等待、latch/mutex 和系统资源等待。

# 8. 典型问题与排查

  • enq: TX row lock contention:查阻塞事务和热点 SQL。
  • library cache mutex:查硬解析、DDL 和游标失效。
  • ITL waits:查热点块、INITRANS 和更新并发。

# 9. 实践建议与检查清单

  • 阻塞链脚本可用
  • 死锁 trace 会分析
  • 热点表有索引和分布策略
  • 事务顺序已评审
  • latch/mutex 能和 SQL 关联

# 10. 阶段小结

本篇的学习重点不是记住术语,而是能把底层机制、业务语义和生产证据连起来。读完本篇后,应该能解释关键组件如何协作、常见问题为什么发生、开发侧如何避免制造风险、运维侧如何用指标和日志把问题定位到具体链路。

上次更新: 2026/06/25, 15:30:11
Oracle事务与一致性读
Undo Redo与归档日志

← Oracle事务与一致性读 Undo Redo与归档日志→

Copyright © 2023-2026 Wray | 鄂ICP备2024050235号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式