本篇内容介绍了“Innodb undo结构是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!rollback segments(128)undo segments(1024)undo log (header insert/modify 分开的) undo pageundo record
undo record作为undo segments的第一个undo page可以存放多个事物的undo log,因为如果这个块的undo 记录没有填满3/4则会进入 rollback segment的cache list,那么下次可以继续使用,但是如果第一个块不足以装下事物的undo 记录,那么很显然需要分配新的undo page,这种情况下一个undo page就只能包含一个事物的undo记录了。
事物每次需要分配rollback segments然后分配undo segments然后初始化好undo log header,insert和update/delete需要分配不同的undo segments,一个undo segments往往对应了一个undo log,undo log可以包含多个undo record(因为从debug来看undo log header的初始化只做了一次),对于操作的每行都会留下一个undo record作为mvcc构建历史版本的基础。
undo生成的基本单位是undo record,每行记录都会包含一个undo record,而rollback ptr指向的是undo record的偏移量,对于每行的记录都会去判断其可见性,如果需要构建前版本则通过本指针进行构建包含:第1位是否是insert 第2到8位是undo segment id 第9到40位为page no 第41位到56位为 offset每一个undo log包含一个trx_undo_t结构体
每一个rollback segments包含一个trx_rseg_t结构体undo page header 每一个undo page都包含undo semgent header 第一个page 才会用 undo segment header信息每一个undo logundo log headerundo log record 相应的undo实际内容undo log record 相应的undo实际内容undo log header 包含第一步为 分配rollback segments第二步 对于主键每行更改操作都会调用trx_undo_report_row_operation 他会分配undo segments 并且会负责写入und免费主机域名o record大概流程我将undo log record的写入到了错误日志免费主机域名,下面进行简单的分解。
表结构如下:insert 的undo记录,具体构造在trx_undo_page_report_insert中
语句输出如下:011e0b0032048000001c就是undo record的实际记录解析如下:update 的undo记录,具体构造在trx_undo_page_report_modify中
语句:输出如下:06560c0032000000003136e0260000002c052e048000000e010304800003e7000e00048000000e030480
就是undo record的记录
大体解析如下:“Innodb undo结构是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注云技术网站,小编将为大家输出更多高质量的实用文章!
小编给大家分享一下MySQL中出现复制1594错误怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 现象:mysql>showslavestatusG;**********…