当前位置: 首页 > postgresql, 锁模块 > 正文

【排队论与碰撞域的物理推演】

  1. 什么是“粒度大”? 在 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数据库的表锁,锁定粒度大,发生锁冲突概率最高,并发度最低:等您坐沙发呢!

    发表评论