MySQL:29 表空间以及划分多个数据页的数据区

Posted 鮀城小帅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL:29 表空间以及划分多个数据页的数据区相关的知识,希望对你有一定的参考价值。

表空间概念

mysql中,我们创建的每个表,有一个表空间的概念,每个表在磁盘上都会对应着“表名.ibd” 这样的一个磁盘数据文件。

也就是说,在物理层面,表空间就是对应一些磁盘上的数据文件。表空间对应的磁盘文件数量不是固定一对一的。

有的表空间,比如系统表空间可能对一个的是多个磁盘文件,而我们创建的表对应的表空间可能就只对应了一个“表名.ibd” 数据文件。

表空间磁盘文件与数据页的关系

在表空间的磁盘文件里,会有很多很多的数据页,从一个数据页不超过16kb可以得知,不可能一个数据页就是一个磁盘文件,因为一个表的数据肯定超过了16kb。

数据区概念

由于一个表空间里包含的数据页实在太多了,不便于管理,所以在表空间里又引入了一个数据区的概念,英文就是extent。

一个数据区对应这连续的64个数据页,每个数据页都是16kb,所以一个数据区是1mb,然后256个数据区被划分为了一组。

表空间中,第一组数据区的第一个数据区的前3个数据页,都是固定的,里面存放了一些描述性的数据。比如 FSP_HDR这个数据页,里面就存放了表空间和这一组数据区的一些属性。

IBUF_BITMAP数据页,里面存放的是这一组数据页的所有 insert buffer 的一些信息。

INODE数据页中,则存放了一些特殊的信息。

小小的总结:

我们平时创建的那些表都是有对应的表空间的,每个表空间都对应了磁盘上的数据文件,在表空间里有很多数据区,一组数据区是256个数据区,每个数据区包含了64个数据页,是1mb。

而表空间的第一组数据区的第一个数据区的前三个数据页,都是存放特殊信息的;其他组数据区的第一个数据区的头两个数据页有存放着特殊信息。

串联起来总结一下:

当我们需要执行CRUD操作的时候,说白了,就是从磁盘上的表空间的数据文件里,去加载一些数据页出来到Buffer Pool的缓存页里去使用。

 

以上是关于MySQL:29 表空间以及划分多个数据页的数据区的主要内容,如果未能解决你的问题,请参考以下文章

oracle表空间查询维护命令大全之中的一个(数据表空间)史上最全

MySQL高级--04--InnoDB数据存储结构---数据页结构

oracle逻辑存储结构

搞懂MySQL分区

innodb 表空间文件分析文章目录

oracle数据库,表空间和表之间是啥关系