目录
1、表空间和数据区的概念
表空间
从 InnoDB 逻辑存储结构来看,所有的数据都被逻辑的存放在一个空间中,这个空间就叫做表空间(tablespace)。表空间由 段(segment)、区(extent)、页(page)组成。
当我们创建一个表之后,在磁盘上会有对应的表名称.ibd
的磁盘文件。表空间的磁盘文件里面有很多的数据页,一个数据页最多16kb,因为不可能一个数据页一个磁盘文件,所以数据区的概念引入了。
一个数据区对应64个数据页,就是16kb,一个数据区是1mb,256个数据区被划分为一组,对于表空间而言,他的第一组数据区的第一个数据区的前3个数据页,都是固定的,里面存放了一些描述性的数据。比 如FSP_HDR这个数据页,他里面就存放了表空间和这一组数据区的一些属性。IBUF_BITMAP 数据页,存放的就是insert buffer的信息,INODE 数据页存放的也是特殊信息。
再次强调一遍:我们平时创建的那些表都是有对 应的表空间的,每个表空间就是对应了磁盘上的数据文件,在表空间里有很多组数据区,一组数据区是256个数据区, 每个数据区包含了64个数据页,是1mb
段(segment)
段(Segment)分为索引段,数据段,回滚段等。其中索引段就是非叶子结点部分,而数据段就是叶子结点部分,回滚段用于数据的回滚和多版本控制。一个段包含256个区(256M大小)。
一个段包含多少区:256个区
区(extent)
区是页的集合,一个区包含64个连续的页,默认大小为 1MB (64*16K)。
页(page)
页是 InnoDB 管理的最小单位,常见的有 FSP_HDR,INODE, INDEX 等类型。所有页的结构都是一样的,分为文件头(前38字节),页数据和文件尾(后8字节)。页数据根据页的类型不同而不一样。
每个空间都分为多个页,通常每页16 KiB。空间中的每个页面都分配有一个32位整数页码,通常称为“偏移量”(offset),它实际上只是页面与空间开头的偏移量(对于多文件空间,不一定是文件的偏移量)。因此,页面0位于文件偏移量0,页面1位于文件偏移量16384,依此类推。 (InnoDB 的数据限制为64TiB,这实际上是每个空间的限制,这主要是由于页码是32位整数与默认页大小的组合
总结
个人理解:表空间表示一本书,段表示书中的章节,区表示每章节的小节,页表示书的每一页,行就是每页的每行数据。表空间里有多个段,一个段包含256个区,一个区包含64个页,一个页为16K。