[MySQL5.6] Innodb独立的undo tablespace

 

在MySQL5.6中开始支持把undo log分离到独立的表空间,并放到单独的文件目录下;这给我们部署不同IO类型的文件位置带来便利,对于并发写入型负载,我们可以把undo文件部署到单独的高速存储设备上.

 

1.使用

有几个参数来控制该行为
 
用于设定创建的undo表空间的个数,在Install db时初始化后,就再也不能被改动了;
默认值为0,表示不独立设置undo的tablespace,默认记录到ibdata中;否则,则在undo目录下创建这么多个undo文件,例如假定设置该值为16,那么就会创建命名为undo001~undo016的undo tablespace文件,每个文件的默认大小为10M
 
修改该值可能会导致Innodb无法完成初始化;
 
用于表示回滚段的个数(早期版本的命名为innodb_rollback_segments ),该变量可以动态调整,但是物理上的回滚段不会减少,只是会控制用到的回滚段的个数;
默认为128个回滚段
 
当开启独立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版本可能实现这个功能,这对于某些服务(比如按磁盘空间收费的云计算提供商)是非常有必要的功能

转载自Simple Life

Innodb独立的undo tablespace的更多相关文章

  1. undo表空间不足,ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS2'

    故障现象:UNDO表空间越来越大,长此下去最终数据因为磁盘空间不足而崩溃: 问题分析:本问题在ORACLE系统管理中属于比较正常的一现象,产生问题的原因主要以下两点: 1. 有较大的事务量让Oracl ...

  2. MySQL 8.0 Undo Tablespace管理

    目录 1. UNDO 基础概念 2. UNDO 相关参数 2.1 参数含义 3. UNDO 表空间运维 3.1 查看UNDO的基本信息 3.2 添加/active/inactive/删除UNDO表空间 ...

  3. ORA-01157错误,丢失undo tablespace中数据文件的解决方法

    我们先来看一下这个现象: [oracle@djp ora12]$ pwd /u01/app/oracle/oradata/ora12 [oracle@djp ora12]$ mv undotbs01. ...

  4. [转载]——Full UNDO Tablespace In 10gR2 and above (文档 ID 413732.1)

    最近遇到了这个案例,官方文档已有详尽的分析.介绍,特转载在此,方便以后查看! Full UNDO Tablespace In 10gR2 and above (SQL> select count ...

  5. 如何为 Automatic Undo Management 调整 UNDO Tablespace 的大小 (Doc ID 262066.1)

    How To Size UNDO Tablespace For Automatic Undo Management (Doc ID 262066.1) APPLIES TO: Oracle Datab ...

  6. Troubleshooting ORA-30036 - Unable To Extend Undo Tablespace (Doc ID 460481.1)

    Troubleshooting ORA-30036 - Unable To Extend Undo Tablespace (Doc ID 460481.1) APPLIES TO: Oracle Da ...

  7. MySQL InnoDB存储引擎undo redo解析

    本文介绍MySQL数据库InnoDB存储引擎重做日志漫游 00 – Undo Log Undo Log 为了实现事务原子,在MySQL数据库InnoDB存储引擎,还使用Undo Log(简称:MVCC ...

  8. [Mysql]Innodb 独立表空间和共享表空间

    innodb有2中表空间方式: 共享表空间 和 独立表空间 查询数据的设置: show variables like '%per_table'; 默认是共享表空间,独立表空间在配置文件中添加 inno ...

  9. 【Oracle】删除undo表空间时,表空间被占用:ORA-30042: Cannot offline the undo tablespace

    特别注意:此办法只用于实在没有办法的时候,因为需要加入oracle中的隐含参数,慎用!!! 1. 先查一下是什么在占用undo SYS@ENMOEDU>select segment_name,o ...

随机推荐

  1. 云端搭建内网局域网+NAT冗余上网:vps-centos6.10 +pptp client +2个ros 实现默认走pptp上网,万一pptp断了,走另外一个ros路由+centos7补充了下

    介绍下环境: 1.ROS1也是PPTP SERVER,IP为172.16.22.3/24,pptp pool为172.16.23.0/24,pptp的默认帐号是111,密码是123 2.ROS2的IP ...

  2. ORM的单表操作

    ORM的单表操作 MTV框架包含一个重要的部分就是ORM----对象关系映射(Object Relational Mapping),它实现了数据模型与数据库的解耦,即数据模型的设计.利用它我们不需要依 ...

  3. [UE4]手持多把枪的位置调节

    如果一个角色有多把枪,但是骨骼插槽只有一个,可以通过直接在枪蓝图中调整枪的位置和旋转角度.

  4. failed to launch: nice -n 0 /home/hadoop/spark-2.3.3-bin-hadoop2.7/bin/spark-class org.apache.spark.deploy.worker.Worker --webui-port 8081 spark://namenode1:7077

    spark2.3.3安装完成之后启动报错: [hadoop@namenode1 sbin]$ ./start-all.shstarting org.apache.spark.deploy.master ...

  5. CRM 2016 IFrame_A嵌入 EXT.net 页面 a.aspx,刷新另一IFrame_B嵌入 b.aspx gird.

    说白了就是一个IFrame页面,执行另一IFrame页面的函数.  a.aspx JS: parent.Xrm.Page.getControl("IFRAME_B").getObj ...

  6. WebBrowser JS回调delphi的方法 (简单通用)

    上一部分讲了Delphi根据方法名调用方法,这一部分还有用到,接着上一章: [主要原理] 通过TEmbeddedWB控件的OnShowMessage事件捕获弹窗来实现,弹窗时定义方法名和参数,在捕获方 ...

  7. django前篇

    http协议 HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本 ...

  8. 删除n天前的所有目录和文件

    删除目录 find /your_dir/ -maxdepth -type d -mtime + -exec rm -rf {} \; 删除文件 find /目录/ -mtime + -name &qu ...

  9. angularjs指令实现轮播图----swiper

    'use strict'; angular.module('app').directive('swipersLbt',swipers); swipers.$inject = ['$timeout']; ...

  10. JVM总结-invokedynamic

    前不久,“虚拟机”赛马俱乐部来了个年轻人,标榜自己是动态语言,是先进分子. 这一天,先进分子牵着一头鹿进来,说要参加赛马.咱部里的老学究 Java 就不同意了呀,鹿又不是马,哪能参加赛马. 当然了,这 ...