mysql undo详谈
1 简介:undo是MVCC机制的基础部分之一
2 作用:为了实现可重复性读,存储历史数据
3 存储:5.6以前undo都存储在内存和ibdata1中,5.6以后undo可以独立成单独的文件,更可以进行truncate表空间,减少磁盘容量
4 处理过程
      1 针对于 update/delete操作.会进行记录快照数据.统称为update_undo.针对insert操作,会进行记录但是随后会删除,毕竟没人关注这个。
      2 本文不考虑对临时表的undo段操作
5 回滚段三阶段
     1 事务开始后,针对读写事务,会预先在内存中分配一个回滚段
     2 事务进行中,将历史数据写入undo page中
            1 事务commit
            2 事务rollback
             1:对于标记删除的记录清理标记删除标记;
             2:对于in-place更新,将数据回滚到最老版本;
             3:对于插入操作,直接删除聚集索引和二级索引记录(row_undo_ins)。
6 purge清理undo段
         1 清理事务提交后不需要的undo信息 从回滚段的HISTORY 文件链表上开始遍历释放Undo log segment,由于history 链表是按照trx no有序的,因此遍历truncate直到完全清除,或者遇到一个还未purge的undo log(trx no比当前purge到的位置更大)时才停止。
         2 清理已经被打上delete标记的数据实现物理删除
        相关参数变量 innodb_purge_threads=1(默认值)
7 相关 innodb status信息
   Purge done for trx's n:o < 219761368 undo n:o < 0 state: running but idle
   History list length 3228
   purge done 代表已经完成的事务量
  n:0< 代表正在执行的purge
  state:代表线程是否繁忙
  history-list-length  代表存在的undo个数 16KX3228 代表使用的undo大小 一页是16K
8 关于ibdata1暴涨的原因
   1 共享表空间=>改用独立表空间
   2 大量undo暴涨了ibdata的空间
     1 存在未完成的事务,可以通过hsitory list观察计算
     2 执行过大事务(一般都是这种原因造成的)
9 补充
当我们delete数据行时,是对数据页中要删除的数据行做标记“deleted”,事务提交(速度快);

10 undo的构成和布局

1 128个回滚段构成,32个回滚段用于系统的临时表空间,96个回滚段用于事务

2  每个回滚段维护了一个段头页,在该page中又划分了1024个slot,每个slot又对应到一个undo log对象,因此理论上InnoDB最多支持 96 * 1024个普通事务。

3  独立表空间的space id都是从1 开始,0被预留在ibdata中.space id必须是连续分配的,不能断档

4  8.0之前的版本默认只能创建128个回滚段

mysql原理~undo的更多相关文章

  1. mysql原理~undo管理

    一 简介:undo管理 二 各版本说明 1 5.5     undo位置:默认ibdata1中,不支持独立表空间   缺点:大事务可能造成ibdata1暴涨,只能dump导出导入或者从新搭建  参数: ...

  2. [转]MySQL日志——Undo | Redo

    本文是介绍MySQL数据库InnoDB存储引擎重做日志漫游 00 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版 ...

  3. 【转载】MySQL 日志 undo | redo

    本文是介绍MySQL数据库InnoDB存储引擎重做日志漫游 00 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版 ...

  4. MySQL日志Undo&Redo

    00 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版本并发控制(简称:MVCC). - 事务的原子性(Atomi ...

  5. MySQL日志——Undo | Redo【转】

    本文是介绍MySQL数据库InnoDB存储引擎重做日志漫游 00 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版 ...

  6. mysql的undo log和redo log

    在数据库系统中,既有存放数据的文件,也有存放日志的文件.日志在内存中也是有缓存Log buffer,也有磁盘文件log file,本文主要描述存放日志的文件.     MySQL中的日志文件,有这么两 ...

  7. mysql 原理 ~ 二阶段提交协议通说

    一 简介: 今天是第二篇,讲解的是mysql的事务日志 二 具体 1 WAL技术(先写日志,再写磁盘) 2 binlog redolog 二阶段提交协议     目的 保持 redo log和binl ...

  8. MySQL之UNDO及MVCC、崩溃恢复

      UNDO特性:避免脏读.事务回滚.非阻塞读.MVCC.崩溃恢复 事务工作流程(图2) MVCC原理机制 崩溃恢复:redo前滚.undo回滚 长事务.大事务:危害.判断.处理 UNDO优化:实现u ...

  9. 还不懂mysql的undo log和mvcc?算我输!

    最近一直没啥时间写点东西,坚持分享真的好难,也不知道该分享点啥,正好有人要问我这些东西,所以腾出点时间,写一下这个主题.同样本篇可以给读者承诺,听不懂或者没收获算我输,哈哈! 众所周知,mysql中读 ...

随机推荐

  1. AtCoder WTF 2019 C2. Triangular Lamps Hard

    题目链接 感觉这样的题真的称得上是鬼斧神工啊,\(\text{OI}\)中能多一些这样的题目就太好了. 题意: 有一个二维的三角坐标系,大概如图所示(图是从atcoder里偷下来的): 坐标系上的每个 ...

  2. wamp下php报错session_start(): open(d:/wamp/tmp\sess_ku776hvb06ko4lv9d11e7mnfj1, O_RDWR) failed: No such file or directory

    报错提示 session_start(): open(d:/wamp/tmp\sess_ku776hvb06ko4lv9d11e7mnfj1, O_RDWR) failed: No such file ...

  3. HDU4287-STL模拟水题

    一场2012天津网络预选赛的题,签到题. 但是还是写了三四十分钟,C++和STL太不熟悉了,总是编译错误不知道怎么解决. 一开始用的Char [] 后来改成了string,STL和string搭配起来 ...

  4. UVA11987 Almost Union-Find

    题目描述 PDF 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 5 7 1 1 2 2 3 4 1 3 5 3 4 2 4 1 3 4 3 3 输出样例#1: 3 12 3 7 ...

  5. IDEA如何刷新pom文件

    被新手问到了“IDEA如何刷新pom文件?”这个问题,想来这是一个不好意思问的常犯的错误吧. 在IDEA中,修改了pom.xml文件,添加了依赖以后,一般会弹出以下这个警告来. 点击[Import C ...

  6. bat 脚本处理windows 文件

    背景:以下脚本使用了导出文件列表.移动文件.复制文件.report 系统信息.分段执行的功能 主要针对在从事于Easeware公司中,对软件Bug中,所需文件的提取. 代码片段说明: cls ver ...

  7. Linux 上传下载文件 [转]

    从服务器下载文件scp username@servername:/path/filename /tmp/local_destination例如:scp codinglog@192.168.0.101: ...

  8. 隐藏SharePoint 2013 team sites里的follow按钮

    cls $featureid = 'a7a2793e-67cd-4dc1-9fd0-43f61581207a'$webapps = Get-spWebApplicationforeach($webap ...

  9. 洛谷 P2466 Sue的小球 解题报告

    P2466 [SDOI2008]Sue的小球 题目描述 Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当 ...

  10. Linux中使用Electronic WeChat客户端

    微信推出了Windows版和Mac版,一直没有推出也不会推出Linux版本,这就催生了Electronic WeChat(https://github.com/geeeeeeeeek/electron ...