mysql原理~undo管理
一 简介:undo管理
二 各版本说明
1 5.5
undo位置:默认ibdata1中,不支持独立表空间
缺点:大事务可能造成ibdata1暴涨,只能dump导出导入或者从新搭建
参数:rollback_segment(默认128个回滚段)
2 5.6
undo位置:默认ibdata1中,支持独立表空间
参数
innodb_undo_logs(代替5.5的名字,默认128个回滚段)
innodb_undo_directory 设置undo位置,默认当前文件夹
innodb_undo_tablespaces 默认关闭,开启需要设置为1
缺点:mysql5.6只支持初始化设置独立表空间,不可中途开启.而且也不能解决回收undo表空间问题.但是可以支持分布在不同磁盘,用来提高IO能力
建议:不建议5.6开启独立undo空间,没什么意义
3 5.7
undo位置:默认ibdata1中,支持独立表空间
参数
innodb_max_undo_log_size=1073741824
innodb_undo_directory=./ 独立undo表空间路径
innodb_undo_log_truncate=OFF 支持truncate回收表空间,默认关闭
innodb_undo_logs=128 128个回滚段
innodb_undo_tablespaces=0 独立表空间,默认为0,需要设置>=2
innodb_purge_rseg_truncate_frequency=128 purge undo轮询128次后,进行一次undo的truncate
4 注意点:
1 mysql5.7同样是只支持初始化设置,不可中途开启
2 truncate会进行清理undo文件的条件: 1 触发 max_undo_log阈值(undo tablespace超过1GB(参数innodb_max_undo_log_size来控制))
2 存在至少一个可用的undo文件
3 被清理对象皆为free,也即为事务不需要
以上三点都达到时候才会触发truncate进行undo表空间收缩,由purge线程执行
5 注意点
1 mysql为什么不支持中途开启独立undo
据我分析和看淘宝周报分析,这与space_id有关,默认ibdata中的space_id=0,一旦中途开启,独立undo空间的space_id为1,系统需要为0,
观察错误: Expected to open 1 undo tablespaces but was able to find only 0 undo tablespaces. Set the innodb_undo_tablespaces parameter to the correct value and retry. Suggested value is 0
可以得知 为0
2 尽量避免大事务,将大事务进行拆分
6 8.0的持续改进:
1 默认开启独立undo表空间,更改undo表空间命名方式,默认大小为10M
2 在8.0之前只能创建128个回滚段,而在8.0版本开始,每个Undo tablespace可以创建128个回滚段,也就是说,总共有innodb_rollback_segments * innodb_undo_tablespaces个回滚段。这个改变的好处是在高并发下可以显著的减少因为分配到同一个回滚段内的事务间产生的锁冲突
3 Innodb_undo_truncate参数默认打开,会自动进行删除
4 支持undo tablespace加密
5 在8.0中直接在内存中为其创建单独的内存结构,这32个slot可以用于持久化的undo回滚段
6 允许动态的增加undo tablespace的个数,也就是说可以动态调整innodb_undo_tablespaces。当调大该参数时,会去创建新的undo tablespace。但如果设小该值,则仅仅是不实用多出来的Undo tablespace,目前不会去主动删除它们
mysql原理~undo管理的更多相关文章
- mysql原理~undo
mysql undo详谈1 简介:undo是MVCC机制的基础部分之一2 作用:为了实现可重复性读,存储历史数据3 存储:5.6以前undo都存储在内存和ibdata1中,5.6以后undo可以独立成 ...
- 关系型数据库工作原理-事务管理(二)(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...
- [转]MySQL日志——Undo | Redo
本文是介绍MySQL数据库InnoDB存储引擎重做日志漫游 00 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版 ...
- 【转载】MySQL 日志 undo | redo
本文是介绍MySQL数据库InnoDB存储引擎重做日志漫游 00 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版 ...
- MySQL日志Undo&Redo
00 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版本并发控制(简称:MVCC). - 事务的原子性(Atomi ...
- 关系型数据库工作原理-事务管理(一)(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...
- MySQL日志——Undo | Redo【转】
本文是介绍MySQL数据库InnoDB存储引擎重做日志漫游 00 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版 ...
- mysql的undo log和redo log
在数据库系统中,既有存放数据的文件,也有存放日志的文件.日志在内存中也是有缓存Log buffer,也有磁盘文件log file,本文主要描述存放日志的文件. MySQL中的日志文件,有这么两 ...
- 第二章--MYSQL体系结构和管理
体系结构 MySQL C/S模型 Server : mysqld Client : socket:仅本地连接使用 tcp/ip:应用连接使用(远程和本地) #TCP/IP方式(远程.本地) mysql ...
随机推荐
- BZOJ3129 SDOI2013方程(容斥原理+扩展lucas)
没有限制的话算一个组合数就好了.对于不小于某个数的限制可以直接减掉,而不大于某个数的限制很容易想到容斥,枚举哪些超过限制即可. 一般情况下n.m.p都是1e9级别的组合数没办法算.不过可以发现模数已经 ...
- windows service 安装/卸载
第一种方法: 前提: Service1 中的serviceProcessInstaller1设置 Account为localSystem 1. 开始 ->运行 ->cmd(管理员身份运行) ...
- webapi Filter
webapi的controller和action的控制. 使用场景:webapi接收到加密数据以及签名.验证签名是否有效.我们不能一个个action增加判断. 所以添加Filter是比较明智的方法. ...
- poj2632 【模拟】
In a modernized warehouse, robots are used to fetch the goods. Careful planning is needed to ensure ...
- Android自动化测试探索
Android自动化测试探索 前言 通常来说,我们开发完成产品之后,都是由测试组或者是我们自己点一点,基本上没有问题了就开始上线.但是,随着时间的堆叠,一款产品的功能也越来越多.这时,我们为了保证产品 ...
- 自学Aruba7.3-Aruba安全认证-802.1x认证(web页面配置)
点击返回:自学Aruba之路 自学Aruba7.3-Aruba安全认证-802.1x认证(web页面配置) 步骤1 建立AP Group,命名为test802-group 步骤2 将AP加入到AP ...
- 关于阿里云Centos服务器搭建Java网站不能访问的问题
首先阿里云提供的手册是没问题的 手工搭建 然后我在地址栏输入服务器地址之后总是提示无法访问! 输入命令 netstat -tunlp,80端口确实是在监听(这里不是8080,因为我在tomcat的配置 ...
- Codeforces Round #525 (Div. 2) Solution
A. Ehab and another construction problem Water. #include <bits/stdc++.h> using namespace std; ...
- idea js改来改去无效问题的解决
不是idea的问题,问题在Chrome上,设置:
- H5 手机拨打电话与转到邮箱的标签属性
<a href="tel:电话号码"></a> <a href-"mailto:邮箱"></a> 说明:第一个标 ...