Postgres 锁机制为何无法扩展

Postgres locks do not scale

Postgres 锁机制为何无法扩展

我们的 Postgres 数据库某天突然 CPU 飙升至 100%,且全部消耗在系统时间上,导致服务全面瘫痪。重启 AWS RDS 无效,最终通过切断安全组连接才勉强恢复。事后复盘发现,15000 个进程因 GIN 索引扩展引发大规模锁队列,所有进程同时触发 CheckDeadlock 检查,导致死锁检测机制本身成为性能瓶颈。这次事故揭示了在高并发场景下,Postgres 锁扩展性的致命缺陷。

数据库花费了巨大的 CPU 时间反复唤醒数千个后端进程,获取全局锁管理器分区锁,并证明根本不可能发生死锁。