我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么使用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这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue中内网/局域网/离线的情况下怎么使用及建立

这篇文章主要介绍“vue中内网/局域网/离线的情况下怎么使用及建立”,在日常操作中,相信很多人在vue中内网/局域网/离线的情况下怎么使用及建立问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue中内网/局域
2023-07-06

编程热搜

目录