MYSQL(一) 事务(3) undo

本文介绍了MySQL中Undo的重要角色,作为MVCC的主要部分,它默认存储在系统表空间,也可独立分配。Undo通过rollback segments管理,最多128个段,其中32个用于临时表事务。内容涉及Undo的结构、事务数量估算、代码解析,以及Insert和Update Undo的区分,并探讨了内存和物理结构的关系。
摘要由CSDN通过智能技术生成

undo的概况

mysql undo 是mvcc主要的实现环节。Undo记录默认备记录到系统表空间内,也可以使用单独的undo 表空间。

undo的结构

undo 使用 rollback segements管理;

手册下结构的描述:
InnoDB supports a maximum of 128 rollback segments, 32 of which are allocated to the temporary tablespace. This leaves 96 rollback segments that can be assigned to transactions that modify data in regular tables. The innodb_rollback_segments variable defines the number of rollback segments used by InnoDB

前面32个是用于管理临时表事物,分配给临时表空间系统的。从32个开始是用于普通的segments,共96个

undo 支持的事务数取决于 回滚段中的撤消槽数和每个事务所需的撤消日志数。这个和inndodb page size相关
默认的是16k一个page

page size number of undo slots
4k 256
8k 512
16k 1024
32k 2046
64k 4096

从上表中可以看到 理论上普通事务支持的事务个数是96乘1024个

mysql undo 主要分别两大类:
1.insert_undo
2.update_undo(update,delete)

由于undo分类 这两类,所以如果需要估计undo支持的并发事务量
需要

(innodb_page_size / 16 / 2) * (innodb_rollback_segments - 32)

当然这受很多影响,这是其他不考虑的情况下,undo能支持的。

一些代码

这部分主要阅读了《数据库内核月报 - 2015 / 04 --MySQL · 引擎特性 · InnoDB undo log 漫游》
相关的定义在mysql-5.7.25\storage\innobase\include\trx0sys.h
mysql-5.7.25\storage\innobase\include\trx0rseg.h等

主要的定义:

参数:
trx0sys.h:
// 128  对于上面描述的128个回滚段  ()
#define TRX_SYS_N_RSEGS        

//UNIV_PAGE_SIZE正常页面的大小  即 1024
#define TRX_RSEG_N_SLOTS    (UNIV_PAGE_SIZE / 16)    

主要结构体:

trx_sys_t 里面的 rseg_array是128,对应这128个回滚段
对应的trx_rseg_t , 再往下就是很多,trx_undo_t 是undo的 log的内存结构。

一条读写事务

从redo里面的一条insert中的btr_cur_ins_lock_and_undo 方法往下看,看能不能连起来。

trx_undo_report_row_operation ->方法


dberr_t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值