Thresh
Undo:意为撤销或勾销,以撤销操作为目标,返回指定某个状态的操作。
Undo Log
数据库事务开始之前,会将要批改的记录寄存到 Undo 日志里,当事务回滚时或者数据库解体时,能够利用 Undo 日志,撤销未提交事务对数据库产生的影响。
Undo Log产生和销毁
Undo Log在事务开始前产生;事务在提交时,并不会立即删除undo log,innodb会将该事务对应的undo log放入到删除列表中,前面会通过后盾线程purge thread进行回收解决。
Undo Log属于逻辑日志,记录一个变动过程。例如执行一个delete,undolog会记录一个insert;执行一个update,undolog会记录一个相同的update。
Undo Log存储
Undo log采纳段的形式治理和记录。在innodb数据文件中蕴含一种rollback segment回滚段,外部蕴含1024个undo log segment。能够通过上面一组参数来管制Undo log存储。
show variables like '%innodb_undo%';
Undo Log作用
实现事务的原子性
Undo Log 是为了实现事务的原子性而呈现的产物。事务处理过程中,如果呈现了谬误或者用户执行了 ROLLBACK 语句,MySQL 能够利用 Undo Log 中的备份将数据恢复到事务开始之前的状态。
实现多版本并发管制(MVCC)
Undo Log 在 MySQL InnoDB 存储引擎中用来实现多版本并发管制。事务未提交之前,Undo Log保留了未提交之前的版本数据,Undo Log 中的数据可作为数据旧版本快照供其余并发事务进行快照读。
事务A手动开启事务,执行更新操作,首先会把更新命中的数据备份到 Undo Buffer中。事务B手动开启事务,执行查问操作,会读取 Undo 日志数据返回,进行快照读