数据库锁机制概述
数据库锁主要根据其锁定的数据粒度,分为全局锁 、表级锁 和行级锁。粒度越细,并发能力通常越高,但管理开销也越大。
一、全局锁
定义:锁定整个数据库实例,使其处于只读状态。
- 作用范围:数据库中的所有表。
- 主要影响 :
- 加锁后,整个实例处于只读状态。
- 后续的DML写操作 、DDL语句 以及更新操作的事务提交都会被阻塞。
- 典型使用场景:全库逻辑备份,确保备份数据的一致性。
二、表级锁
每次操作锁定整张表。其下主要分为两种:
1. 表锁
- 特点:开销小,加锁快。
- 缺点:并发度最低,锁冲突概率高。
2. 元数据锁
- 特点:自动加锁,无需显式使用。
- 作用:保证表结构(元数据)与查询操作的正确性,防止在查询过程中表结构被修改导致数据不一致。
- 加锁规则 :
- MDL读锁 :当对表进行
增删改查(DML)操作时自动添加。读锁之间不互斥,允许多个线程同时对一张表进行DML操作。 - MDL写锁:当对表进行结构变更(DDL,如加字段)操作时自动添加。
- MDL读锁 :当对表进行
- 锁互斥规则 :
- 读锁与写锁互斥:一个线程在执行DML时,另一个线程不能修改表结构。
- 写锁与写锁互斥:两个线程不能同时修改表结构,必须串行执行。
三、行级锁
定义:针对数据表中单行或多行记录的锁。
- 作用场景:当多个事务需要更新同一行数据时,后发起的事务必须等待前一个事务释放该行的锁。
- 特点 :
- 优点:锁冲突概率最低,并发度最高。
- 缺点:开销大,加锁慢。
- 常见类型:记录锁、间隙锁、临键锁等。
总结对比
| 锁类型 | 锁定粒度 | 开销 | 加锁速度 | 并发度 | 适用场景 |
|---|---|---|---|---|---|
| 全局锁 | 整个数据库 | 小 | 快 | 最低 | 全库备份 |
| 表级锁 | 整张表 | 小 | 快 | 低 | DDL操作、数据迁移 |
| 行级锁 | 单行记录 | 大 | 慢 | 高 | 高并发事务更新 |