• 描述undo的三个作用


    1rollback

      1、一个事务开始,生成一个事务id(找事务counter

      2、读取系统事务表,找到一个回滚段(找相对空闲的),读取回滚段的段头块(段头里面有很多行,找到其中空闲的行,把事务id写进去,写进去之后一个事务就开始了,一个事务槽盛放一个事务id,也就是说一个事务开始了需要找到事务槽把事务id写进去)和一些回滚页(事务数据块)(我要修改一个数据行, 在数据行里需要把事务id写进去,在后面找一个undo块盛放修改前的数据),rollpointer(回滚指针)指向盛放旧数据的最后一个undo块,最后一个块指向前一个块,都链起来。当回滚的时候,先找到最后一个undo块,依次往前逆着读,把脏数据块还原成原来的数据块。

    2、写不阻塞读

      采用的是数据行的rollpointer指针,结合undo数据,读取数据修改前的值,构造一致性读,避免脏读。

      能够避免脏读,就不需要采用写阻塞读的方式来避免脏读。

    3、崩溃恢复(redo前滚,undo回滚。未提交事务主动回滚,未提交事务信息在事务槽里写着)

      数据库在运行期间,突然崩了,数据库启动之后,需要redo前滚,就会有很多未提交的事务也滚回来了,系统中存在很多未提交的事务,并且这些事务的会话断了,不可能继续完成了,就需要对未提交事务回滚了,所有的未提交事务的信息都在事务槽里面存着,读取事务槽,把未提交事务回滚。

  • 相关阅读:
    thinkphp自动映射分析
    thinkphp自动创建数据对象分析
    html模板输头部出现"&#65279"
    register_shutdown_function 函数详解
    mcrypt加密以及解密过程
    SVN不能解锁,报错:没有匹配的可用锁令牌的解决方法
    微信公众平台JSSDK开发
    PHP的UTF-8中文转拼音处理类
    PHP中文转拼音函数
    php生成mysql数据字典
  • 原文地址:https://www.cnblogs.com/5945yang/p/11265866.html
Copyright © 2020-2023  润新知