最近看innodb部分记录

innodb cyanprobe 6年前 (2019-06-15) 2209次浏览 已收录 0个评论

前言:

瞎写了一阵子gbdb,发现问题很多,瞅着时间看了下innodb的代码。主要是缓存池和mtr部分。

记录:

buffer_pool 初始化过程 开辟内存空间block 绑定 frame(包含页方法)  由于开辟的空间是连续的所以可以通过block的内存空间指针来寻址,然后查找对应的frame就能拿到页的信息(学到了…之前一直还在传递页和space的属性)。
mtr部分,mtr是最小的物理事务保证,之前对这个的理解有些模糊,自己想了一阵子现在明白了些,书上写到一个逻辑事务可能包含多个物理事务,比如插入一条数据可能有多个mtr产生,mtr从redo_buffer刷入时间是不同的,一个逻辑事务的完成是靠undo_log的记录来溯回状态的,也就说一条逻辑事务没有必要一次性刷盘,如果分开刷盘也会可以的。
逻辑事务完成要求的一次性刷盘是为了保证记录事务状态的undolog的redolog刷盘,这时事务才是完成的,此时这条逻辑事务才算结束。如果不要求(innodb_flush_log_at_trx_commit=0 ps:逻辑事务提交返回成功 由系统每秒刷盘)  注意这个选项,如果系统崩溃可能丢失的是本次事务1秒内的,如果这条逻辑事务产生的物理事务mtr 有 1,2,3 条,再上一次刷盘时机 1,2 已经被刷入。那么系统恢复时根据undolog判定的状态为正在进行,就直接回滚了(恢复过程中已经刷盘的1,2 是会被载入的)。


CyanProbe , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:最近看innodb部分记录
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址