Appearance
MySQL
关键词
- MVCC
- redo log
- undo log
- MVCC
- 事务回滚
- binlog
- 行锁
for update - 间隙锁
- 临键锁(行锁+间隙锁)
MySQL InnoDB 的 MVCC 和锁策略
| 锁类型 | 阻塞其它事务写 | 阻塞其它事务加锁读(FOR SHARE/FOR UPDATE) | 阻塞普通读(MVCC) |
|---|---|---|---|
| FOR SHARE | 是 | 是(阻塞 FOR UPDATE) | 否 |
| FOR UPDATE | 是 | 是(阻塞 FOR SHARE 和 FOR UPDATE) | 否 |
| 普通 SELECT | 否 | 否 | 否 |
事务隔离级别
不可重复读、幻读
undo log/redo log/binlog/MVCC 怎么配合工作
| 步骤 | 发生在哪儿 | 内容 |
|---|---|---|
| 事务开始 | 事务管理器 | 生成事务 ID,快照版本 |
| 修改前备份 | Undo Log | 备份旧数据,支持回滚和 MVCC 快照 |
| 修改数据行 | 数据页(内存/磁盘) | 写新版本,设置事务 ID 和 undo 指针 |
| 生成 Redo Log | redo log 缓冲区 | 物理页变更记录,保证崩溃恢复 |
| 提交事务 | redo log + binlog(MySQL Server 层) | 持久化 redo log;写 binlog 供复制(主从同步)和恢复 |
| 事务提交后 | 释放锁 | 其他事务才能读取或修改这些数据 |
| 读操作 | MVCC+undo log | 读快照版本,不阻塞写 |