快照读的弊端
本文参考 https://blog.csdn.net/bohu83/article/details/105336004
Mysql的读取分为两种,快照读和当前读。快照读就是解决幻读的关键,但是快照读却有一个致命的问题,就是如果undolog链太长了,会导致一次快照读耗时非常长
示例如下
你看到了,session A先用start transaction with consistent snapshot命令启动了一个事务,之后session B才开始执行update 语句。
session B执行完100万次update语句后,id=1这一行处于什么状态呢?
session B更新完100万次,生成了100万个回滚日志(undo log)。
带lock in share mode的SQL语句,是当前读,因此会直接读到1000001这个结果,所以速度很快;而select * from t where id=1这个语句,是一致性读,因此需要从1000001开始,依次执行undo log,执行了100万次以后,才将1这个结果返回。