InnoDB undo tablespace使用及原理

前言

Undo log是InnoDB MVCC事务特性的重要组成部分,对记录做了变更操作时会产生undo记录,默认存储到系统表空间中,但是从5.6开始,可以使用独立的undo表空间。

Undo记录存储的是老版本数据,当一个旧事务需要读取数据时,为了能读取到老版本数据,需要顺着undo连找到满足其可见性的记录。当版本链很长时,可以认为这是要一个比较耗时的操作。

大多数对记录的变更insert、update、delete。Insert操作在事务提交前只对当前事务可见,因此产生的undo日志可以在事务提交后直接删除(没有对刚插入的数据有可见性需求),而对于update、delete则需要维护多版本信息。

Undo tablespace

MySQL5.6可以使用独立undo表空间。innodb_undo_tablespaces:0-126,在系统初始化后该文件大小默认是10M。虽然可以将其从系统表空间提出了,使系统表空间不再因为大事务而迅速不断增大,但是独立出来的undo表空间仍然比较鸡肋,不能truncate。而且也没有相关undo表空间文件大小的阈值。

MySQL5.7.5之后undo表空间可以truncate了。需要配置至少2个undo表空间innodb_undo_spaces=2,undo表空间被删除时临时设置为offline状态,至少有另外一个undo表空间服务才可以让server工作。如果配置成1个undo表空间的话,即使开启truncate也没用,本undo表空间文件会一直增大,甚至撑爆磁盘。

Mysql5.7.5之后版本,set global innodb_undo_log_truncate=on开启truncate功能,innodb_max_undo_log_size为undo表空间文件的阈值,默认1G,超过改值,会自动进行truncate。如果不开启truncate则导致undo表空间文件不断增大。

被选中删除的undo文件,对应的回滚段标记为inactive,purge回收不再使用的回滚段,完成后进行truncate,恢复到10M大小,回滚段再次标记为active。

innodb_undo_logs定义了InnoDB使用的回滚段个数,必须设置35个以上;第一个常驻系统表空间,若使用独立undo表空间,则第一个置为inactive。回滚段2-33在共享临时表空间ibtmp1。34th 35th分别是独立表空间的第一个和第二个。

undo tablesapce和回滚段之间什么关系

可以看到在系统启动的时候创建好undo表空间。默认undo表空间放到系统表空间里面。当将undo表空间独立出来时,undo表空间轮流分给各个回滚段。


可以看到当undo表空间提出了的时候,回滚段是轮询分配给每个事务的,并且不使用系统表空间,保证所有的undo log都存储到undo 独立表空间中。

原文地址:http://blog.51cto.com/yanzongshuai/2118434

时间: 2024-10-18 07:38:01

InnoDB undo tablespace使用及原理的相关文章

Innodb独立的undo tablespace

[MySQL5.6] Innodb独立的undo tablespace 在MySQL5.6中开始支持把undo log分离到独立的表空间,并放到单独的文件目录下:这给我们部署不同IO类型的文件位置带来便利,对于并发写入型负载,我们可以把undo文件部署到单独的高速存储设备上. 1.使用 有几个参数来控制该行为 #innodb_undo_tablespaces 用于设定创建的undo表空间的个数,在Install db时初始化后,就再也不能被改动了: 默认值为0,表示不独立设置undo的table

undo/redo功能的原理和思路

一些具有操作记录的系统,如店铺装修.富文本编辑等,都具有undo/redo功能,可实现界面操作过程的撤销和恢复,简述开发undo/redo功能的原理和思路. undo是将用户上一步做的操作对程序造成的改动恢复到改动之前,而redo操作是指重新实现这种改动. undo/redo操作的实现方式分为两类:记录数据和记录操作. 记录数据是指将信息编辑窗口打开时,保存原始数据,然后记录用户每次操作后的结果数据,这里的数据是指信息编辑窗口中所有可能发生变动的数据.做undo操作时程序将用户上一步操作前的数据

Oracle Undo tablespace恢复(无备份)

Oracle Undo tablespace恢复 系统环境:   操作系统:RedHat EL55   Oracle:  Oracle 11gR2   Oracle 9i后,采用了undo tablespace管理undo数据,实现undo的自动管理,本案例演示了undo表空间被破坏后如何恢复:如果有备份,通过备份恢复非常容易,但在没有备份的情况下,就需要采用非常规手段来恢复了,呵呵. 1.案例应用环境 undo表空间undo segments: 14:34:44 [email protecte

How manager undo tablespace

What is the undo data ? 事务在修改数据块时,oracle db会copy修改前的数据块到undo tablespace,这个数据块称之为undo data. Why oracle db needs undo data ? 1.回滚未提交的事务 2.确保数据库一致性读 3.支持oracle flashback功能 What is the undo tablespace? 存放undo data的表空间称之为undo 表空间.undo tbs空间可以重复使用. Undo Re

undo tablespace RETENTION GUARANTEE

DBA_TABLESPACES中的RETENTION列说明: Undo tablespace retention: GUARANTEE---Tablespace is an undo tablespace with RETENTION specified as GUARANTEE A RETENTION value of GUARANTEE indicates that unexpired undo in all undo segments in the undo tablespace shou

UNDO TABLESPACE切换后,旧的长时间没有完全OFFLINE,案列:

案列: 由于生产库impdp导入一个分区表,期间出了问题,终止了导入,但是undo tablespace增长飞快增长到300G了,且经过两天才降下来,但是undo tablespace如果是自动扩展,只会扩展,当事务都结束了它自己也不会收缩的,所以只能手工去收缩. 于是创建一组新的undo tablespace,命名为undotbs2 alter system set undo_tablespace=undotbs2; 在线切换了undo tablespace; 手工切换完了但是还不能立即将旧的

Managing the UNDO TABLESPACE

Every Oracle Database must have a method of maintaining information that is used to roll back, or undo, changes to the database. Such information consists of records of the actions of transactions, primarily before they are committed. These records a

InnoDB undo, redo,binlog,data什么时候写?

undo:相当于数据修改前的备份 redo: 相当于数据修改后的备份,为了保证事务的持久化,redo会一直写 Undo + Redo事务的简化过程  假设有A.B两个数据,值分别为1,2.  A.事务开始.  B.记录A=1到undo log.  C.修改A=3.  D.记录A=3到redo log.  E.记录B=2到undo log.  F.修改B=4.  G.记录B=4到redo log.  H.将redo log写入磁盘.  I.事务提交 - Undo + Redo事务的特点  A. 为

【oracle11g,13】表空间管理2:undo表空间管理(调优) ,闪回原理

一.undo空间原理: dml操作会产生undo数据. update时,sever process 会在databuffer 中找到该记录的buffer块,没有就从datafile中找并读入data buffer.在修改之前,原始数据先放到undo段,并在数据块头记录undo段(acitve 状态)中该数据块的位置,读写这个块时会占用事务槽,会将该事务号记录在数据块的头部.然后在进行update,并将该块放到dirty list检查点队列,等待dbwr进行写操作. 二.创建新的undo表空间替换