Open xffxff opened 3 years ago
我的理解,分成两点来说:
一条日志记录应该可能包含一个或者多个 chunk,尽量让一个 chunk 包含一条日志记录(Full),如果一条日志太大,可能会被 block 分开,在不同 block 中的同一条日志记录会用多个 chunk 描述,那么就需要给 chunk 打上标记,说明是 同一条 日志的不同部分(First,Middle,Last),同时 每个 chunk 都会计算自己的 checksum,为了保证每个chunk 的完整性(如果对不上就舍弃这个 chunk)
再来说为什么设置成 32KB 这个大小,redo log 在恢复数据库内容的时候是顺序读,所以说无所谓读取多大的数据,所以可以设置成尽可能大的大小,但是也不能太大,如果太大,某个 block 中的某个 chunk 太大,如果这个 chunk 被损坏,那么之后舍弃的内容就会比较多,这个 chunk 之后的内容都要被舍弃掉,和之后包含同一条日志的 chunk 都会被舍弃,所以32KB的大小是一个 trade off;如果太小,读取就要分很多次,如果太大,那么其中某个 chunk 如果损坏,之后这个 block 中的内容都不能再使用了,会造成一定的浪费(恢复数据的粒度减小)
说的挺好的,但还是感觉引入chunk很绕,chunk就是指下面这个下面这个函数写入磁盘的东西吧
确实,在代码里的对应就应该是这里了 @XFFXFF
增加读取效率体现在?