欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL 基础知识梳理学习(二)----记录在页面层级的组织管理

程序员文章站 2022-03-09 14:33:13
1.InnoDB的数据存储结构 InnoDB中数据是通过段、簇、页面构成的。 (1)段是表空间文件中的主要组织结构,它是一个逻辑概念,用来管理物理文件,是构成索引、表、回滚段的基本元素。创建一个索引(B+树)时会同时创建两个段,分别是内节点段和叶子段,内节点段用来管理(存储)B+树中非叶子节点(页面 ......

1.innodb的数据存储结构

innodb中数据是通过段、簇、页面构成的。 

MySQL 基础知识梳理学习(二)----记录在页面层级的组织管理

(1)段是表空间文件中的主要组织结构,它是一个逻辑概念,用来管理物理文件,是构成索引、表、回滚段的基本元素。创建一个索引(b+树)时会同时创建两个段,分别是内节点段和叶子段,内节点段用来管理(存储)b+树中非叶子节点(页面)的数据,叶子节点用来管理(存储)b+树中叶子节点数据。一个索引包括2个段,那么一个表的段的数目,就是索引的个数乘以2了。

(2)簇是构成段的基本元素,一个段有若干个簇构成。一个簇是物理上连续分配的一段空间,每个段至少有一个簇,在创建一个段时就会默认创建一个簇。如果存储数据时,一个簇已经不足以放下更多的数据,此时需要从这个段中分配一个新的簇来存放新的数据。一个段所管理的空间大小是无限的,可以一直扩展下去,但扩展的最小单位是簇。簇的空间大小是固定的,一般为64个页面。

一个索引是由两个段组成的,两个段之间的物理位置是没有关系的,而每个段由多个簇组成,多个簇之间的物理位置也是没有关系的。

(3)簇的物理空间内部还可以继续被切分并高效管理。“页面”就是簇在细化之后的产物,它是簇的组成单位,也是段所管理的最小单位、数据库文件管理的最小单位,也是文件中空间分配的最小单位。一个页面默认为16kb。一个簇中可以包含多个页面(默认64)个页面,这个页面数通常被称为“簇的大小”。这些页面都归这个簇管理,在逻辑上(页面号都是从小到到连续的)以及物理上都是连续的。

 

 2.页面是如何对记录组织管理的

innodb是使用b+树来保证通过树形结构找到一个记录所在的页面,而在页面内部真正找到这条记录是通过“槽”来完成的槽的作用是用来在页面内进行数据搜索的,在innodb存储引擎中,多条记录对应一个槽。

MySQL 基础知识梳理学习(二)----记录在页面层级的组织管理

 

槽位于页面的最后位置,其长度与页面内存储的记录数有关。

槽中数据的增长是以高字节到低字节的顺序存储的,最高位的槽代表的是页面内索引顺序最小的记录,而低槽位代表的是索引顺序最大的记录,即在页面内,通过槽位置的顺序,来表示业内所有记录的顺序。

可以将槽理解为是一个以下标值为元素值的可*扩展的数组。并且,这个数组是有序的,在不断增删改的过程中,都会修改这个数组,该平移的平移,该删除的删除,但需要保证的是,每次操作完成之后,槽的数组还是有序的。当然,真实的数组元素值不会是下标,从上面的示意图可以看出,真正的值是页面内槽所对应的记录在页面内的偏移量。所以,如果,页面内数据发生了改变,只需要修改槽的位置即可变相地修改页面内数据的大小关系了。

我们知道,在每条记录开始位置之前的两个字节,是用来存储下一条记录的指针信息的,所以在每一个槽指向的最后一条记录前面,为了体现它会指向下一个槽的第一条记录,都会有一个指向说明框,用来说明指向的值是多少、位置是多少。

从示意图中可以看出,槽中存储的数据是没有顺序的,因为它们是槽所对应的第一个记录在页面内的偏移量,比如第0号位存储的989,这说明本页内最小的记录在偏移为989的位置存储,这个槽对应的数据还可以查询到2、3、4,他们是通过链表连接起来的。值为4的记录是第0号槽的最后一条记录,值为4的记录指向的下一个记录为偏移为289位置值为6,这个位置正好是第1位的槽,第1号槽包括的数据有6、9、11、11、15这四个值。依次类推,可以从槽数据出发,找到页面内所有记录,并且数据都是有序的,可以利用二分查找的方法快速搜索定位找到所需的记录。

最后补充说明一点,页面最后的8个字节,主要存储的页面校验的checksum值(前四节)和当前页面最新被修改的lsn值(后四节)。

 

-----主要部分内容参考梳理于网络知识,此仅为学习笔记,在此原创作者感谢!