千家信息网

怎么使用MySQL5.6中Innodb独立的undo tablespace

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"怎么使用MySQL5.6中Innodb独立的undo tablespace",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么使用M
千家信息网最后更新 2026年11月01日怎么使用MySQL5.6中Innodb独立的undo tablespace

这篇文章主要讲解了"怎么使用MySQL5.6中Innodb独立的undo tablespace",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么使用MySQL5.6中Innodb独立的undo tablespace"吧!

1.使用

有几个参数来控制该行为

# innodb_undo_tablespaces

用于设定创建的undo表空间的个数,在Install db时初始化后,就再也不能被改动了;

默认值为0,表示不独立设置undo的tablespace,默认记录到ibdata中;否则,则在undo目录下创建这么多个undo文件,例如假定设置该值为16,那么就会创建命名为undo001~undo016的undo tablespace文件,每个文件的默认大小为10M

修改该值可能会导致Innodb无法完成初始化;

# innodb_undo_logs

用于表示回滚段的个数(早期版本的命名为 innodb_rollback_segments ),该变量可以动态调整,但是物理上的回滚段不会减少,只是会控制用到的回滚段的个数;

默认为128个回滚段

# innodb_undo_directory

当开启独立undo表空间时,指定undo文件存放的目录

如果我们想转移undo文件的位置,只需要修改下该配置,并将undo文件拷贝过去就可以了。

2.相关代码

#在innodb启动时(innobase_start_or_create_for_mysql),会进行undo表空间初始化,细节见函数srv_undo_tablespaces_init

->如果是新建实例,会去创建undo log文件,undo表空间的space id从1开始;默认初始化大小为10M,由宏SRV_UNDO_TABLESPACE_SIZE_IN_PAGES控制;

->读取当前实例的所有undo表空间的space id (trx_rseg_get_n_undo_tablespaces)

首先从ibdata中读取到事务系统的文件头,然后再从其中记录的回滚段信息,找到回滚段对应的space id和page no(trx_sysf_rseg_get_space,trx_sysf_rseg_get_page_no),并按照space id排序后返回;

->根据上一步读到的space id依次打开undo文件(srv_undo_tablespace_open),如果不存在,就标识启动失败

所以undo文件也是类似ibdata的重要文件,目前是不可以删除的。。。所以不要试图删除undo文件来释放空间- -!

可以容忍定义的table space个数比已有的undo文件个数要少(但所有的undo文件依然会打开),反之则报错初始化失败

#undo回滚段初始化 (trx_sys_create_rsegs)

如果是正常shutdown重启,并且设置的回滚段个数大于目前已经使用的回滚段个数(trx_sysf_rseg_find_free),就会去新建回滚段(trx_rseg_create)

这里总是从第一个undolog tablespace开始初始化回滚段,看起来似乎有些问题,极端情况下,如果我每次重启递增innodb_undo_logs,是不是意味着所有的undo回滚段都会写入到第一个undo tablespace中?

完成初始化后,将当前可用的undo 回滚段的个数复制给srv_available_undo_logs,可以通过show status查看:

root@performance_schema 12:16:18>show status like 'Innodb_available_undo_logs';
+----------+---+
| Variable_name | Value |
+----------+---+
| Innodb_available_undo_logs | 128 |
+----------+---+
1 row in set (0.00 sec)

启动后,innodb_undo_logs是可以动态调整的,但最大不可以超过Innodb_available_undo_logs

#在一个非只读的事务开启时,会为其分配回滚段(trx_assign_rseg_low),动态的调整innodb_undo_logs可以限定分配的回滚段范围;

TODO

当有长时间运行的事务时,可能导致purge操作来不及回收undo空间,进而导致undo空间急剧膨胀;理论上讲,如果做一次干净的shutdown,应该可以安全的将将这些undo文件删除并重新做一次初始化;也许未来的某个MySQL版本可能实现这个功能,这对于某些服务(比如按磁盘空间收费的云计算提供商)是非常有必要的功能

感谢各位的阅读,以上就是"怎么使用MySQL5.6中Innodb独立的undo tablespace"的内容了,经过本文的学习后,相信大家对怎么使用MySQL5.6中Innodb独立的undo tablespace这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

文件 空间 个数 独立 事务 动态 学习 控制 调整 内容 功能 大小 实例 情况 版本 目录 问题 分配 干净 必要 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司经营范围 厦门中拓互联网络科技有限公司 互联网最新的科技有限公司 互联网科技小贷 万易互联网科技有限公司 中国互联网科技发展 上海喔噻互联网科技 互联网 新科技 互联网科技宣传片 华脉科技工业互联网产品 上海电发互联网科技有限公司 中国科技互联网公司收入 荆州市昕露互联网络科技有限公司 智腾互联网科技有限公司 速维有品互联网信息科技(苏州)有限公司 迪庆互联网科技招生 广州富喜互联网络科技 互联网安防科技感 抖集互联网科技技术咨询 科技互联网企业在行动 青岛互联网科技公司 中国互联网金融科技基金 广州慧亚互联网科技怎么样 福州新华互联网科技学校 知乎 常德市电业局互联网科技部 互联网公司科技股 中国互联网公司排名锤子科技 互联网时代科技型公司的机会 杭州科技互联网公司有哪些 瑞安市蟠桃会互联网科技有限公司
0