当前位置: 首页 > news >正文

【MySQL精通之路】InnoDB(6)-磁盘结构(6)-Undolog

1.介绍

Undolog是与单个读写事务相关联的Undolog记录的集合。

Undolog包含有关如何撤消事务对聚集索引记录最新更改的信息。如果另一个事务需要将查看一致性读的一部分原始数据,则会从Undolog记录中检索未修改的数据。

2.结构

Undolog记录存在于Undolog段

Undolog段存在于回滚段

回滚段存在于Undo表空间和全局临时表空间中。

位于全局临时表空间中的Undolog用于修改用户定义的临时表中的数据的事务。

这些Undo记录不会被重新记录,因为它们不是崩溃恢复所必需的。

它们仅用于服务器运行时的回滚。这种类型的undo日志避免了redo日志I/O,从而提高了性能。

有关undolog的静态数据加密的信息,请参阅undolog加密。

2.1 回滚段和Undo槽(rollback segments和slots)

每个undo表空间全局临时表空间分别支持最多128个回滚段

innodb_rollback_segments变量定义回滚段的数量。

回滚段支持的事务数取决于回滚段中撤消槽的数量以及每个事务所需的Undo日志的数量。

回滚段中撤消槽的数量因InnoDB页面大小而异。

InnoDB 页大小回滚段中的Undo槽数量 (InnoDB页大小 / 16)
4096 (4KB)256
8192 (8KB)512
16384 (16KB)1024
32768 (32KB)2048
65536 (64KB)4096

3.类型

一个事务最多分配四个Undolog,以下操作类型各分配一个:

对用户定义表的INSERT操作

对用户定义的表执行UPDATEDELETE操作

对用户定义的临时表执行INSERT操作

对用户定义的临时表执行UPDATEDELETE操作

根据需要分配Undolog。

例如,对常规表和临时表执行INSERT、UPDATE和DELETE操作的事务需要完全分配四个Undolog。只对常规表执行INSERT操作的事务需要一个Undolog。

对常规表执行操作的事务从分配的Undolog表空间回滚段分配Undolog。对临时表执行操作的事务从分配的全局临时表空间回滚段分Undolog。

分配给事务的Undolog在其持续时间内保持附加到事务。

例如,为常规表上的INSERT操作分配给事务的Undolog将用于该事务在常规表上执行的所有INSERT操作

考虑到上述因素,以下公式可用于估计InnoDB能够支持的并发读写事务的数量。

注意:
在达到InnoDB能够支持的并发读写事务数量之前,可能会遇到并发事务限制错误。

当分配给事务的回滚段用完Undo槽时,就会发生这种情况。

在这种情况下,请尝试重新运行事务。

当事务对临时表执行操作时,InnoDB能够支持的并发读写事务的数量受到分配给全局临时表空间的回滚段数量的限制,默认为128

如果每个事务执行INSERT或UPDATE或DELETE操作,InnoDB能够支持的并发读写事务数为:

(innodb_page_size / 16) * innodb_rollback_segments * number of undo tablespaces

如果每个事务执行INSERT和UPDATE或DELETE操作,InnoDB能够支持的并发读写事务数为:

(innodb_page_size / 16 / 2) * innodb_rollback_segments * number of undo tablespaces

如果每个事务对一个临时表执行INSERT操作,那么InnoDB能够支持的并发读写事务数为:

(innodb_page_size / 16) * innodb_rollback_segments

如果每个事务对临时表执行INSERT和UPDATE或DELETE操作,InnoDB能够支持的并发读写事务数为:

(innodb_page_size / 16 / 2) * innodb_rollback_segments

相关文章:

  • 【C语言】程序员自我修养之文件操作
  • 初始化是什么
  • 技术人内卷下新的尝试
  • Windows下安装Hadoop(引导版)
  • python-鸡兔同笼问题:已知鸡和兔的总头数与总脚数。求笼中鸡和兔各几只?
  • CSP模板生成系统
  • 三维科技云展厅如何突破传统展览的局限,赋能企业高效展示
  • linux常用命令之大数据平台搭建版
  • [CocosCreator]Android的增加AndroidX的动态权限
  • 【JavaScript寻宝之旅】var和let的区别
  • 图书管理系统(Java版本)
  • 如何进行前端职业规划
  • 小红书-社区搜索部 (NLP、CV算法实习生) 一面面经
  • 宝藏网站推荐-封面图片生成器
  • 芯课堂 | UI Creator 物理键盘移植指南
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • JavaScript 一些 DOM 的知识点
  • js算法-归并排序(merge_sort)
  • oschina
  • PHP的Ev教程三(Periodic watcher)
  • Quartz初级教程
  • WePY 在小程序性能调优上做出的探究
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 离散点最小(凸)包围边界查找
  • 目录与文件属性:编写ls
  • 扑朔迷离的属性和特性【彻底弄清】
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 智能网联汽车信息安全
  • kubernetes资源对象--ingress
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #stm32驱动外设模块总结w5500模块
  • #数据结构 笔记三
  • ${ }的特别功能
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (1)虚拟机的安装与使用,linux系统安装
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (算法)Game
  • (一一四)第九章编程练习
  • (转载)虚函数剖析
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .net core使用ef 6
  • .NET Micro Framework初体验(二)
  • .net 简单实现MD5
  • .Net 垃圾回收机制原理(二)
  • .net 生成二级域名
  • .net 托管代码与非托管代码
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .Net小白的大学四年,内含面经