
在 MySQL InnoDB 引擎里,快照读为什么能不加锁就完成查询?它依赖下面哪一类日志?
A、binlog
B、undo log
C、slow log
D、redo log
这里的关键是 MVCC:快照读读取的是事务开始时的数据版本,而不是当前最新数据,因此不会像当前读那样加锁。那么,这个“历史版本”是由谁维护的?
答案选 B、undo log。
undo log 会保存数据修改前的旧版本,快照读通过 MVCC 机制读取这些历史版本,从而实现无锁一致性读;而 binlog 负责主从复制与数据恢复,slow log 记录慢查询,redo log 则用于崩溃恢复。
|