MySQL 8.0.2 新特性 UNDO表空间管理的灵活性提升
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,一篇自己翻译的文章,原文来自MySQL Server官方团队博客:原文链接:http://mysqlserverteam.com/mysql-8-0-2-more-flexible-undo-tabl
千家信息网最后更新 2025年11月07日MySQL 8.0.2 新特性 UNDO表空间管理的灵活性提升一篇自己翻译的文章,原文来自MySQL Server官方团队博客:
原文链接:http://mysqlserverteam.com/mysql-8-0-2-more-flexible-undo-tablespace-management/
同时也发布在了老叶茶馆:
https://mp.weixin.qq.com/s?__biz=MjM5NzAzMTY4NQ==&mid=2653930802&idx=1&sn=db6c9acab8fb41da004f36ff90355258&chksm=bd3b5f588a4cd64e25e1beeac66d6a71beaa2ff0617ea8e46d3af5f9a3aecb4ff744b8d06b26&scene=38#wechat_redirect
在MySQL 8.0.2 DMR版本中,我们将提高InnoDB的UNDO表空间易管理性。
〇 主要有几点提升:
1、可以随时自由地创建或删除UNDO表空间;
2、无论是否需要进行InnoDB恢复,也可以在启动前更改相关设置;
3、即便InnoDB引擎处于繁忙状态时,也可以增加或减少UNDO表空间的数量。
〇 innodb_undo_tablespaces:
UNDO表空间包括回滚段,而回滚段又包括UNDO日志。UNDO日志用于'回滚'事务和创建MVCC所需要的旧版本数据,以便在一个事务中保证数据库快照的一致性。
以前,当数据库初始化时,InnoDB的UNDO表空间的数量是确定的。而现在可以随时将其值设置为0~127之间的任意值,并可通过启动时读取的配置文件,或者命令行,或者通过在线'SET GLOBAL INNODB_UNDO_TABLESPACES=n'进行修改。
当UNDO表空间数量设置为0时(不使用独立UNDO表空间),所有的回滚段将存储在系统表空间中。这是在 5.6版本之前,无法支持独立UNDO表空间存储回滚段情景下的旧模式。我们尝试通过这种方式尽量不使用系统表空间,所以默认值不会设置为2。在将来的版本中该选项最小值是2,这表明系统表空间将不会被用作任何回滚段。所以请不要在你的配置文件中设置innodb_undo_tablespaces=0。
〇 innodb_undo_log_truncate:
我们将UNDO表空间的最小值设为2,因为当一个UNDO表空间被清空时,至少还需要有另一个UNDO表空间。InnoDB将在大事务结束后进行UNDO清除操作以收缩UNDO表空间大小。以前,innodb_undo_log_truncate的默认值为OFF,而在8.0.2版本该值默认为ON。
〇 innodb_rollback_segments:
选择可以随时设置为1~128之间的任何值。可通过启动时读取的配置文件,或直接在命令行中传递参数,或者启动后在线执行命令'SET GLOBAL INNODB_ROLLBACK_SEGMENTS=n'。
这个选项曾是用于整个服务器可以支持的回滚段数。现在为每一个UNDO表空间的回滚段数,允许并发事务使用更多的回滚段数,该选项默认值仍为128。
〇 innodb_undo_logs:
该选项在5.6中作为innodb_rollback_segments的替代或者别名所引入。在InnoDB中术语有一点儿混乱,'Undo Logs'存储在回滚段中,这是UNDO表空间的文件段。在8.0.2版本,我们打算弃用该选项改用Innodb_rollback_segments选项。在最新的发布的5.7.19版本中将增加这个不建议使用的warnings提示。
〇 UNDO表空间命名和位置:
UNDO表空间位于innodb_undo_directory所指定的目录中。如果该选项没有被使用,则放在'datadir'中。以前,他们被命名为'undo001', 'undo002'。在8.0.2 DMR版本,他们被称作'undo_001', 'undo_002'等。改名的原因是在新的UNDO表空间中包含了一个新的头页面,其映射了每一个回滚段的位置。而在5.6版本中,当使用独立UNDO表空间时,其回滚段头页面号由系统表空间所跟踪,并且限制整个实例的回滚段数为128。
由于每个UNDO表空间可以使用这个新页来跟踪自己的回滚段,这些是真正新的UNDO表空间类型,并需要有不同的命名约定。这也是innodb_rollback_segments现在定义每个UNDO表空间回滚段数量而不是整个MySQL实例数量的原因。
〇 自动升级:
在此更变之前,系统表空间会跟踪所有回滚段,无论他们位于系统表空间还是UNDO表空间。如果现在在一个使用系统表空间跟踪回滚段的已经存在了的数据库上启动MySQL 8.0.2,将自动生成至少两个新的UNDO表空间。这将是很正常的,因为innodb_undo_tablespaces之前的默认值为0。MySQL 5.7数据库将直接通过升级进程,其中包括从旧的FRM文件创建新的DD。作为此进程的一部分,还将创建至少两个新的UNDO表空间。已经存在于系统表空间中的回滚段和UNDO表空间,如果尚有未清除的undo log,则它们仍然会被InnoDB识别并使用。但是InnoDB不会将这些老的回滚段分配给任何新的事务。所以一旦UNDO恢复完成,并不再需要这些UNDO日志,旧的UNDO表空间也将被删除。
〇 更多好处:
此新特性允许你在数据库规模增长时,动态地添加更多的UNDO表空间和回滚段。使用更多的UNDO表空间,可以更轻松地通过UNDO表空间清除来减少用于存放回滚段的磁盘空间消耗。此外,更多的回滚段意味着并发事务可尽可能的使用单独的回滚段,以减少相同资源的争用。
Thanks for using MySQL!
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px 'Helvetica Neue'}
原文链接:http://mysqlserverteam.com/mysql-8-0-2-more-flexible-undo-tablespace-management/
同时也发布在了老叶茶馆:
https://mp.weixin.qq.com/s?__biz=MjM5NzAzMTY4NQ==&mid=2653930802&idx=1&sn=db6c9acab8fb41da004f36ff90355258&chksm=bd3b5f588a4cd64e25e1beeac66d6a71beaa2ff0617ea8e46d3af5f9a3aecb4ff744b8d06b26&scene=38#wechat_redirect
在MySQL 8.0.2 DMR版本中,我们将提高InnoDB的UNDO表空间易管理性。
〇 主要有几点提升:
1、可以随时自由地创建或删除UNDO表空间;
2、无论是否需要进行InnoDB恢复,也可以在启动前更改相关设置;
3、即便InnoDB引擎处于繁忙状态时,也可以增加或减少UNDO表空间的数量。
〇 innodb_undo_tablespaces:
UNDO表空间包括回滚段,而回滚段又包括UNDO日志。UNDO日志用于'回滚'事务和创建MVCC所需要的旧版本数据,以便在一个事务中保证数据库快照的一致性。
以前,当数据库初始化时,InnoDB的UNDO表空间的数量是确定的。而现在可以随时将其值设置为0~127之间的任意值,并可通过启动时读取的配置文件,或者命令行,或者通过在线'SET GLOBAL INNODB_UNDO_TABLESPACES=n'进行修改。
当UNDO表空间数量设置为0时(不使用独立UNDO表空间),所有的回滚段将存储在系统表空间中。这是在 5.6版本之前,无法支持独立UNDO表空间存储回滚段情景下的旧模式。我们尝试通过这种方式尽量不使用系统表空间,所以默认值不会设置为2。在将来的版本中该选项最小值是2,这表明系统表空间将不会被用作任何回滚段。所以请不要在你的配置文件中设置innodb_undo_tablespaces=0。
〇 innodb_undo_log_truncate:
我们将UNDO表空间的最小值设为2,因为当一个UNDO表空间被清空时,至少还需要有另一个UNDO表空间。InnoDB将在大事务结束后进行UNDO清除操作以收缩UNDO表空间大小。以前,innodb_undo_log_truncate的默认值为OFF,而在8.0.2版本该值默认为ON。
〇 innodb_rollback_segments:
选择可以随时设置为1~128之间的任何值。可通过启动时读取的配置文件,或直接在命令行中传递参数,或者启动后在线执行命令'SET GLOBAL INNODB_ROLLBACK_SEGMENTS=n'。
这个选项曾是用于整个服务器可以支持的回滚段数。现在为每一个UNDO表空间的回滚段数,允许并发事务使用更多的回滚段数,该选项默认值仍为128。
〇 innodb_undo_logs:
该选项在5.6中作为innodb_rollback_segments的替代或者别名所引入。在InnoDB中术语有一点儿混乱,'Undo Logs'存储在回滚段中,这是UNDO表空间的文件段。在8.0.2版本,我们打算弃用该选项改用Innodb_rollback_segments选项。在最新的发布的5.7.19版本中将增加这个不建议使用的warnings提示。
〇 UNDO表空间命名和位置:
UNDO表空间位于innodb_undo_directory所指定的目录中。如果该选项没有被使用,则放在'datadir'中。以前,他们被命名为'undo001', 'undo002'。在8.0.2 DMR版本,他们被称作'undo_001', 'undo_002'等。改名的原因是在新的UNDO表空间中包含了一个新的头页面,其映射了每一个回滚段的位置。而在5.6版本中,当使用独立UNDO表空间时,其回滚段头页面号由系统表空间所跟踪,并且限制整个实例的回滚段数为128。
由于每个UNDO表空间可以使用这个新页来跟踪自己的回滚段,这些是真正新的UNDO表空间类型,并需要有不同的命名约定。这也是innodb_rollback_segments现在定义每个UNDO表空间回滚段数量而不是整个MySQL实例数量的原因。
〇 自动升级:
在此更变之前,系统表空间会跟踪所有回滚段,无论他们位于系统表空间还是UNDO表空间。如果现在在一个使用系统表空间跟踪回滚段的已经存在了的数据库上启动MySQL 8.0.2,将自动生成至少两个新的UNDO表空间。这将是很正常的,因为innodb_undo_tablespaces之前的默认值为0。MySQL 5.7数据库将直接通过升级进程,其中包括从旧的FRM文件创建新的DD。作为此进程的一部分,还将创建至少两个新的UNDO表空间。已经存在于系统表空间中的回滚段和UNDO表空间,如果尚有未清除的undo log,则它们仍然会被InnoDB识别并使用。但是InnoDB不会将这些老的回滚段分配给任何新的事务。所以一旦UNDO恢复完成,并不再需要这些UNDO日志,旧的UNDO表空间也将被删除。
〇 更多好处:
此新特性允许你在数据库规模增长时,动态地添加更多的UNDO表空间和回滚段。使用更多的UNDO表空间,可以更轻松地通过UNDO表空间清除来减少用于存放回滚段的磁盘空间消耗。此外,更多的回滚段意味着并发事务可尽可能的使用单独的回滚段,以减少相同资源的争用。
Thanks for using MySQL!
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px 'Helvetica Neue'}
作者微信公众号(持续更新)
空间
版本
系统
事务
数据
数据库
数量
文件
更多
跟踪
命令
日志
存储
独立
配置
最小
两个
之间
位置
原因
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
初创企业用什么数据库
红河bim软件开发工程
如何看服务器是不是linux
网络安全分为主机安全
金寨网络安全排名
东莞安卓软件开发中心
高级网络技术支持工程师
域名和服务器进不去网站怎么办
记载数据库系统
腾讯网络安全厉害吗
安卓数据库新增刷新
精准扶贫数据库
网络安全基本命令的结论
服务器 心跳监控
a股网络安全股票有哪些
南通华腾软件开发有限公司
odbc数据库连接的命令
江西数据库入门培训
服务器后面的网口都是什么
2020网络安全法时间
移动宽带服务器名称
了解网络安全产品
互联网翻译软件开发工资高吗
宜春个人服务器找哪家
东莞安卓软件开发中心
张新社光网络技术课后答案
网络安全发声亮剑学生
华为公有云总共有多少台服务器
嵌入式软件开发合同
关于网络安全的坏处30个字