简单理解Oracle中的latch

可以用一个小卖部抢购的例子来理解 Oracle 数据库中的 Latch:


1、 什么是 Latch?

打个比方,假设数据库的某个内存区域(比如缓存的数据块)是小卖部货架上的最后一包辣条,Latch 就像是货架前的一个狭窄通道:

(1)只能一次过一人:通道非常窄,一次只能一个人通过去拿辣条,其他人必须排队。

(2)动作要快:拿辣条的人动作很急,拿完立刻离开通道(Latch 持有时间极短)。

(3)没有登记名字:如果多人抢,谁会抢到?规则很简单:拼命挤(比如「自旋」重复尝试)或者暂时放弃排队(等待)。

这就是 Latch 的核心作用:保护内存中的关键数据(比如缓存块、链表),避免被多个线程同时修改导致混乱。


2、关键特点

(1)轻量级:Latch 占资源少,获取和释放极快(像生活中的插队,瞬间完成)。

(2)物理竞争:如果一群人同时抢一个 Latch(比如都想改同一个缓存块),数据库可能卡顿(类似通道堵住)。

(3)自旋 vs 睡眠:

自旋(Spin):线程原地疯狂尝试抢(反复挤通道),适合争抢时间短的情况。

睡眠(Sleep):暂时放弃排队,让出 CPU,适合争抢时间长的情况。


3、Latch 和 Lock(普通锁)的区别

保护对象:

Latch → 内存结构(比如缓存块、链表)。

Lock → 业务数据(比如表中的某一行)。

持续时间:

Latch → 极短(毫秒级)。

Lock → 可能长达事务结束。

管理方式:

Latch → 无队列,简单粗暴抢(挤通道)。

Lock → 有等待队列,公平排队。


4、举个实际场景

假设多个用户同时修改同一张表的同一行数据:

(1)Oracle 需要先找到这行数据在内存中的位置(缓存块)。

(2)Latch 介入:此时需要短暂获取这个缓存块的 Latch,防止其他线程在读取/修改时出现数据错乱。

(3)Latch 被释放后,才能获取普通的行锁(Lock)继续操作。


5、如果 Latch 争抢严重?

就像一群人挤破头都要抢一个狭窄通道,结果可能是:

数据库性能下降(卡在"挤通道"上)。

通常会看到 latch: cache buffers chains、latch free 等待事件。

解决办法:优化 SQL(减少访问同一数据块)、调整内存参数、分散热点等。


总结:Latch 是 Oracle 内部的高并发"交通指挥员",用最简单的规则保护内存数据,避免"踩踏事故"。

相关推荐
冒泡的肥皂1 小时前
MVCC初学demo(一
数据库·后端·mysql
.Shu.2 小时前
Redis Reactor 模型详解【基本架构、事件循环机制、结合源码详细追踪读写请求从客户端连接到命令执行的完整流程】
数据库·redis·架构
薛晓刚5 小时前
当MySQL的int不够用了
数据库
SelectDB技术团队5 小时前
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
数据库·数据仓库·数据分析·apache doris·菜鸟技术
星空下的曙光6 小时前
mysql 命令语法操作篇 数据库约束有哪些 怎么使用
数据库·mysql
小楓12016 小时前
MySQL數據庫開發教學(一) 基本架構
数据库·后端·mysql
染落林间色6 小时前
达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW
数据库·sql
颜颜yan_6 小时前
企业级时序数据库选型指南:从传统架构向智能时序数据管理的转型之路
数据库·架构·时序数据库
lichenyang4536 小时前
管理项目服务器连接数据库
数据库·后端
沙振宇6 小时前
【数据库】通过‌phpMyAdmin‌管理Mysql数据
数据库·mysql