gydtep 发表于 2022-11-16 07:29:15

之后,针对TRX_UNDO_DEL_MARK_REC类型,调用row_purge_remove_sec_if_poss将需要删除的记录从所有的二级索引上删除,调用row_purge_remove_clust_if_poss从主索引上删除。

gydtep 发表于 2022-11-16 08:05:23

Undo Log是InnoDB十分重要的组成部分,它的作用横贯InnoDB中两个最主要的部分,并发控制(Concurrency Control)和故障恢复(Crash Recovery),InnoDB中Undo Log的实现亦日志亦数据。

gydtep 发表于 2022-11-16 18:35:02

Rollptr指向的是该记录的上一个版本的位置,包括space number,page number和page内的offset。沿着Rollptr可以找到一个Record的所有历史版本。

gydtep 发表于 2022-11-17 08:47:33

会写自己对应的Redo Log,通过Redo Log来保证自己的原子性。因此,更合适的称呼应该是Undo Data。

gydtep 发表于 2022-11-17 09:57:25

其中Undo Number是Undo的一个递增编号,Table ID用来表示是哪张表的修改。下面一组Key Fields的长度不定,因为对应表的主键可能由多个field组成,这里需要记录Record完整的主键信息,回滚的时候可以通过这个信息在索引中定位到对应的Record。除此之外,在Undo Record的头尾还各留了两个字节用户记录其前序和后继Undo Record的位置。

gydtep 发表于 2022-11-18 13:47:49

Update Cache List中是空闲空间比较多,可以被后续事务复用的Update类型Undo Segment;对应的,Insert List和Insert Cache List分别是正在使用中的Insert类型Undo Segment,和空间空间较多,

gydtep 发表于 2022-11-19 16:26:24

前面提到过,作为Logical Log,Undo中记录的其实是前后两个版本的diff信息,而读操作最终是要获得完整的Record内容的,也就是说这个沿着rollptr指针一路查找的过程中需要用Undo Record中的diff内容依次构造出对应的历史版本

gydtep 发表于 2022-11-21 16:01:54

ransaction J就已经Commit,因此所有的读事务都一定能被Index中的版本或者第一个Undo历史版本满足,不需要更老的Undo,因此整个Transaction J的Undo Log都可以清理了。

gydtep 发表于 2022-11-22 14:13:20

每一时刻最多有一个Tablespace处于inactive,inactive的Undo Tablespace上的所有Rollback Segment都不参与给新事物的分配,等该文件上所有的活跃事务退出

gydtep 发表于 2022-11-23 10:32:47

大大提升建站效率。Mesh化在国际化大规模落地,把非业务逻辑下沉到Sidecar,让业务聚焦业务开发。业务Serverless化,淘宝导购前端100%上FC函数计算云产品,
页: 18 19 20 21 22 23 24 25 26 27 [28] 29 30 31 32 33
查看完整版本: 免费领取阿里云大礼包3150元和0.26折优惠