您的位置:首页 > 数据库 > MySQL

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

2012-08-09 12:51 267 查看
存储相关的代码学习。以storage/innobase/btr/目录下的源码为入口,进行相应的代码分析。

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

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

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

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

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

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

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

5、page中的slot

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

page_dir_get_nth_slot的nth是0-based计数的

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

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

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

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

c)page_rec_get_next_low用于获取下一条记录的偏移。在mysql的rec设计中,存在一个字段用于保存下一条记录的偏移
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: