Mysql Innodb存储引擎下mvcc的undo log问题?

最近在看了很多关于Mysql的InnoDB引擎中MVCC的相关知识点, 看了好多相关资料, 也大概知道了undo-log的作用, 但是好像没有能解决如下这些疑问

  1. 很多资料说 "事务中insert操作的undo log提交后就删除undo log", 问题是:那干脆insert不生成undo log不就行了,生成出来给谁用?
  2. 事务生成undo log的时间点到底在哪里? 是事务开始第一个操作(select/update/insert/delete)都会生成undo-log? 还是事务中的每个操作都会生成undo-log?

    如果是前者, 那事务中操作不同行的数据, 只有第一次操作会生成undo-log可就不行了;

    如果是后者, 那事务中可能selet一行, 之后又update这行数据, 那岂不是生成相同的undo-log记录了, 感觉没必要;

    还是? 在事务中每第一次操作一数据行, 就生成undo-log?

  1. 不同事务在修改同一行数据的时候, 如果都生成undo-log,那就有了多个相同的undo-log,是这样么? 最后事务提交时, 将undo-log往history list上放的时候undo-log会重复么?
阅读 3.1k
2 个回答

终于搞明白了

新手上路,请多包涵

1.undo log是顺序追加,每行数据中有回滚指针,回滚指针的值是与事务id等有关的,所以insert记录追加后,后面要重做回滚的时候,需要用到insert记录的事务id等这样的信息,把记录回溯回去。

2.在update/insert/delete事务操作过程中会追加undo log日志,每执行一行如update,则会追加这一行记录到undo log中。

3.undo log属于innodb引擎实现,用在du已提交,可重复读事务级别,因此不会存在一模一样的记录,除非是读未提交隔离级别(脏读)。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题