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设计中,存在一个字段用于保存下一条记录的偏移
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设计中,存在一个字段用于保存下一条记录的偏移
相关文章推荐
- MySQL源码学习:InnoDB的ib_logfile写入策略
- Innodb行锁源码学习(一)
- mysql 存储引擎 innodb 学习复习 之 锁
- MySQL系列:innodb源码分析之redo log恢复
- Mysql源码学习笔记——偷窥线程
- MySQL源码学习笔记——偷窥线程
- 从MySQL的源码剖析Innodb buffer的命中率计算
- mysql dba系统学习(10)innodb引擎的redo log日志的原理 mysql dba系统学习(11)管理innodb引擎的redo log日志的一个问题
- MySQL系列:innodb源码分析之基础数据结构
- MySQL系列:innodb源码分析之重做日志结构
- Mysql源码学习——Connection Manager
- 小白学习mysql 之 innodb locks
- 分布式架构学习之:MySQL源码编译安装(CentOS-6.7+MySQL-5.6)
- 源码安装Mysql,补装innodb引擎方法
- mysql 源码学习笔记:mysqld启动流程
- mysql dba系统学习(11)管理innodb引擎的redo log日志的一个问题
- mysql dba系统学习(2)了解mysql的源码目录及源文件
- MySQL源码分析(4):InnoDB主要数据结构及调用流程
- 解析MySQL的体系架构及学习Mysql存储引擎MyISAM和InnoDB
- 数据库学习之--Linux下Mysql源码包安装