封锁机制的操作单位其实讲白了就是“你锁多大一块数据”。数据库的锁分粗细,锁得越细,资源并发越高,但开销也大。嗯,这一篇讲的就是这个话题——封锁粒度。
数据库的封锁对象分两种:逻辑单元和物理单元。逻辑上比如属性值、元组、整张表,物理上就是页、记录这些更底层的东西。一般你写业务 SQL 不太碰得上物理级,但搞性能调优时就躲不了。
像 S 锁
(共享锁)和 X 锁
(排它锁)都是锁在某个具体的数据对象上的。举个例子,查一条订单详情,加个 S 锁
防止别人改;改用户余额,加 X 锁
防止脏数据。
锁粒度小,比如锁行、锁列,效率高并发也高,但锁的管理成本也更高。反过来,锁整表、锁页,对并发不友好,但实现简单稳定。所以,怎么选锁粒度,跟你业务规模和性能需求都有关系。
这套课件内容不多,干货不少,适合快速搞清楚“锁什么、怎么锁、锁多大”。还有几个不错的延伸链接可以看看:
- 封锁粒度详解:从基本原理讲起,比较系统
- MySQL 锁机制:粒度与实现:偏向 MySQL 实战
- Oracle 数据库多粒度锁机制:Oracle 党可以关注
- 多粒度数据库封锁技术续篇:进阶内容,配合主文食用更香
如果你刚开始接触数据库锁,不妨先过一遍课件内容,重点理解“对象”和“粒度”的关系。搞清楚这些,再去看各大数据库的锁策略就不晕了。