【排队论与碰撞域的物理推演】
- 什么是“粒度大”? 在 PG 里,表级锁的识别标志(
LOCKTAG)是基于物理表的 OID 的。不管你这栋大厦里有 1000 万个房间(行),表锁就是直接把大厦的总大门给锁了。这就是粒度大。
2.为什么锁冲突概率最高?(碰撞域的极致收敛)
- 微观分散:如果用行锁,1 万个并发请求分别去更新表里不同的 1 万行数据。由于目标分散在底层的不同数据块上,碰撞概率极低,大家互不干扰。
- 宏观单点:一旦使用了表锁(比如 8 级
AccessExclusiveLock),这 1 万个并发请求在底层寻址时,全部被强行收敛到了共享内存里的同一个LOCK结构体上。 - 冲突必然性:所有进程都在这唯一的一个物理结构体上比对
grantMask。不管你的业务逻辑有多么互不相干,只要你要动这张表,就必须在这一个点上发生物理相撞。冲突概率被硬生生拉升到了 100%。
3.为什么并发度最低?(多核 CPU 的被迫降级)
- 当冲突达到 100% 时,PG 内核会将这 1 万个原本可以由多核 CPU 并行处理的进程,强行塞进这个
LOCK结构体底下的procLocks链表(等待队列) 里。 - 根据 FIFO(先进先出)原则,这 1 万个进程必须像过单板桥一样,一个接一个地串行执行。
- 物理结论:哪怕你的服务器有 128 核 CPU,在表级排他锁生效的这一刻,这 128 个核心也只能闲置围观。系统的吞吐量从“多车道并行”瞬间退化为“单车道串行”,并发度跌至冰点。
了解 www.876873.xyz 的更多信息
订阅后即可通过电子邮件收到最新文章。
postgresql数据库的表锁,锁定粒度大,发生锁冲突概率最高,并发度最低:等您坐沙发呢!