31 表空间以及划分多个数据页的数据区,又是什么概念?
2023/2/27大约 3 分钟
现在我们在大致了解了数据页的结构和使用之后,我们可以继续来了解下一个概念,就是表空间和数据区的概念。
首先我们先说一下,什么是表空间?
- 简单来说,就是我们平时创建的那些表,其实都是有一个表空间的概念,在磁盘上都会对应着**
表名.ibd
**这样的一个磁盘数据文件 - 所以其实在物理层面,表空间就是对应一些磁盘上的数据文件
有的表空间,比如系统表空间可能对应的是多个磁盘文件,有的我们自己创建的表对应的表空间可能就是对应了一个“表名.ibd”数据文件。
然后在表空间的磁盘文件里,其实会有很多很多的数据页,因为大家都知道一个数据页不过就是16kb而已,总不可能一个数据页就是一个磁盘文件吧。
所以一个表空间的磁盘文件里,其实是有很多的数据页的。
但是现在有一个问题,就是一个表空间里包含的数据页实在是太多了,不便于管理,所以在表空间里又引入了一个数据区的概念,英文就是extent
一个数据区对应着连续的64个数据页,每个数据页是16kb,所以一个数据区是1mb,然后256个数据区被划分为了一组。
对于表空间而言,他的第一组数据区的第一个数据区的前3个数据页,都是固定的,里面存放了一些描述性的数据。
- 比如FSP_HDR这个数据页,他里面就存放了表空间和这一组数据区的一些属性。
- IBUF_BITMAP数据页,里面存放的是这一组数据页的所有insert buffer的一些信息。
- INODE数据页,这里也是存放了一些特殊的信息
总结
我们平时创建的那些表都是有对应的表空间的,每个表空间就是对应了磁盘上的数据文件,在表空间里有很多组数据区,一组数据区是256个数据区,每个数据区包含了64个数据页,是1mb。
表空间的第一组数据区的第一个数据区的头三个数据页,都是存放特殊信息的;
表空间的其他组数据区的第一个数据区的头两个数据页,也都是存放特殊信息的。
所以磁盘上的各个表空间的数据文件里是通过数据区的概念,划分了很多很多的数据页的,因此当我们需要执行crud操作的时候,说白了,就是从磁盘上的表空间的数据文件里,去加载一些数据页出来到Buffer Pool的缓存页里去使用。
下图给出了一个表空间内部的存储结构,包括一组一组的数据区,每一组数据区是256个数据区,然后一个数据区是64个数据页。
