• undo清理 &redo 持久化


    为了进行mvcc(多版本并发控制)与回滚,innodb单独管理着undo空间(undo space、rollback segment)。

    1)当执行update语句后,即使不执行commit,数据列也会在innodb缓冲池修改。但是innodb存储引擎无法确定用户执行update语句后,执行rollback操作还是commit操作。

         因此为了应对用户可能rollback操作的情形,先要将修改之前的数据保存到undo日志。

    2)当用户进行commit,缓冲池中变更的内容就会持久化。

    3)当用户进行rollback,就会将保存在undo日志的旧数据还原。

    innodb不会将缓冲池中的内容立即刷到数据文件,而是按照一定周期写入。所以,执行完(1)时,数据文件列值可能为新值,也可能为旧值。(若innodb的后台线程已经将记录写入数据文件,那么原值就会被更新为新值)

    大量客户连接中的数据发生变化时,undo日志会积累许多变更前的信息,这些积累的信息必须在某时刻进行删除,留出足够空间来保存以后的变更内容,这个动作就是undo清理(undo purge)。mysql5.7的innodb,允许用户将innodb_purge_threads系统变量设置为大于1的值,这样就可以多个undo清理线程做清理工作。

    redo持久化:

    当执行DML语句时,变更的数据会先记录到重做(redo)日志,同时持久化到磁盘。

    innodb存储引擎只在内存(innodb缓冲池)中更改实际数据表的数据,innodb会在某个时刻将仅在内存(innodb缓冲池)中更改的数据持久化到磁盘。

  • 相关阅读:
    Bookmarks_www2
    Linux系统各发行版镜像下载(持续更新)
    tiny-rtems-src
    rtems-os-source
    OpenRCT2-ext
    PAT甲级1004题解——并查集思想改
    PAT甲级1008水题飘过
    PAT甲级1007题解——贪心
    PAT甲级1006水题飘过
    PAT甲级1005水题飘过
  • 原文地址:https://www.cnblogs.com/xxmysql/p/5749749.html
Copyright © 2020-2023  润新知