undo log在ACID中的作用

undo log在acid中保证a的作用, 同时对c和i也有一定的作用。

undo log在mysql5.7版本中还是存在于ibdata1中的,8.0后有单独的存放文件。

加入undo后事务的递交流程总结:

  0. begin执行开启事务时会产生一个TXID(事务号)

  1. 把事务中涉及到的数据行所在ibd page页整个16kb大小的内容及LSN号加载到data buffer poll中

  2. 修改data buffer poll中的数据及LSN号累加1.

  3. 在undo log中记录事务号及事务发生前的信息。

  4. redo log buffer缓冲区中会记录data buffer poll中的数据变化日志,LSN号,事务号

  5. commit时, mysql的WAL机制使日志优先于数据入盘(即redo log中, 含LSN号, 事务号),

    此时事务号会被标记为已递交(入盘数据还包含其它未递交事务), 返回事务成功提示。

  6. 此时undo log中会把该事务号及变更信息打上标记,表示可以被其它信息覆盖了

如果发生rollback回滚操作

  接上面的0-4步骤,简述rollback命令后发生的变更

  5. rollback后该事务号相关信息从undo log中undo log buffer中(这里就是事务开始前的数据),

    使用undo log buffer中的数据再把data buffer poll中的相关修改给恢复回去。

 

上一篇:事务的 ACID 是指什么?


下一篇:Apache CarbonData 2.0 RC2预览版发布,在数据湖+索引+ACID方面大幅增强