mysql(v5.5.25)源码学习-innodb

存储相关的代码学习。以storage/innobase/btr/目录下的源码为入口,进行相应的代码分析。

 

1innobase的每个page中都存在infimumsupremum两个伪记录。用于指示该页内最小和最大的记录。在btr_get_prev_user_recbtr_get_next_user_rec这两个函数中进行rec的移动时,都要对这两个特殊的记录进行判断。

2page_rec_is_infimum用于判断是否为最小伪记录。在page中,伪记录的位置是固定的,通过偏移就可以判断该记录是否为伪记录

3innodb的页大小是在编译期指定的,不是在通过生成库的时候指定。此种情况相对来说不够灵活。

4、通过记录获得记录偏移和page地址的算法(函数为page_offset)。

a)所有和磁盘进行镜像的page页的起始地址都是UNIV_PAGE_SIZE的整数倍。UNIV_PAGE_SIZE2的整数次幂

b)通过去掉rec地址中大于等于UNIV_PAGE_SIZE的位数,获得rec所在page的偏移

c)通过清除rec地中小于UNIV_PAGE_SIZE的位数,即可得到page的地址

5page中的slot

page页的尾部,使用2字节整数的数组,保存记录在页内的偏移。该数组为变长数组,其长度和页内的记录数目相同,页内第一条记录放在数组的最后,页内最后一条记录放在该数组的第一位。

page_dir_get_nth_slotnth0-based计数的

page_dir_find_owner_slot返回的是给定的recordslot数组中的编号。此编号是0-based计数的。第一条记录的编号是0

6、在页内获取前一条记录或者后一条记录

a)在page页内,slot用于保存有记录偏移信息,该信息保存在page页的尾部。

b)通过在slot中进行搜索,找到保存rec偏移的slot,该slot的位置就是rec所在的位置

cpage_rec_get_next_low用于获取下一条记录的偏移。在mysqlrec设计中,存在一个字段用于保存下一条记录的偏移

posted @ 2012-08-09 12:51  惡盈好謙  阅读(484)  评论(0编辑  收藏  举报