锁机制锁
2022年12月24日约 399 字大约 1 分钟
锁机制锁
1. MyISAM 和InnoDB 存储引擎使用的锁
- MyISAM 采用的是表级锁(table-level locking)
- InnoDB 支持行级锁(row-level locking)和表级锁,默认行为是行级锁
2.表级锁和行级锁对比
表级锁
MySQL 中锁定 粒度最大的一种锁,对当前操作的整张表加锁
- 优势
- 实现简单,资源消耗少,加锁快
- 不会出现死锁
- 缺点
- 其锁粒度最大,触发锁冲突的概率最高
- 并发度最低
- 优势
行级锁
MySQL 中锁定 粒度最小的一种锁,只针对当前操作的行加锁
- 优势
- 大大减少数据库操作的冲突
- 加锁粒度小,并发度高
- 缺点
- 加锁的开销大
- 加锁慢
- 会出现死锁
3. InnoDB存储引擎的锁算法
- Record lock:单个行记录上的锁
- Gap lock: 间隙锁,锁定一个范围,不包括记录本身
- Next-key lock: record+gap 锁定一个锁范围,包含记录本身
3.1 相关知识点
- innodb 对于行的查询使用next-key lock
- next-locking keying 为了解决Phantom Problem幻读问题
- 当查询的索引含有唯一属性时,将next-key lock降级为 record key
- Gap 锁设计的目的是为了阻止多个事务将记录插入到同一范围内,这会导致幻读问题的产生
- 有两种方式显示关闭gap 锁:(除了外键约束和唯一性检查外,其余情况仅使用record lock)
- 将事务隔离级别设置为READ-COMMITTED
- 将参数innodb_locks_unsafe_for_binlog 设置为1
Powered by Waline v2.9.1