简单理解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 内部的高并发"交通指挥员",用最简单的规则保护内存数据,避免"踩踏事故"。

相关推荐
全栈老石21 分钟前
拆解低代码引擎核心:元数据驱动的"万能表"架构
数据库·低代码
倔强的石头_19 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤3 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
爱可生开源社区4 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
加号35 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏5 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐5 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再5 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip