《Mysql是怎样运行的》读书笔记之独立表空间结构

目录

  • 数据目录
  • 表空间

数据目录
mysql的数据目录是用来存储MySQL运行过程中产生的数据。
数据目录对应一个系统变量datadir。查看这个系统变量就可以了。

SHOW VARIABLES LIKE 'datadir';

每次创建一个数据库时:

  1. 都会在数据目录下创建一个与数据库同名的子目录。
  2. 在与该数据库同名的子目录下创建一个名为db.opt的文件,这个文件包含了该数据库的一些属性,比如该数据库的字符集和比较规则等。

对于InnoDB存储引擎来说,每一个表空间可被划分成很多个页,表数据存放在表空间下的某些页中。表空间分为几种不同的类型。

(1)系统表空间

若使用系统表空间存储表中的数据,会在该表所在数据库对应的子目录下创建一个名为“表名.frm”,表中的数据会存储在系统表空间对应的文件中。
(2)独立表空间
若使用独立表空间存储表中的数据,会在该表所在数据库对应的子目录下创建一个名为“表名.frm”和文件和另一个名为“表名.ibd”的文件,表中的数据会存储在个表名为“表名.ibd”文件中。

表空间
表空间被划分为许多连续的区,对于大小为16KB的页面来说,每个区默认由64个页(就是1MB)组成,每265个区划分为一个组,每个组最开始的几个页面的类型是固定的。
段是一个逻辑上的概念,是某些零散的页面以及一些完整的区的集合。
对个区对应一个XDES Entry结构,这个结构中存储了一些与这个区有关的属性,这些区可以被分为下面的几种类型。

  1. 空闲的区:这些区被加入到FREE链表。
  2. 有剩余闲页面的碎片区:这个区被加入到FREE_FRAG链表。
  3. 没有剩余空闲区的碎片区:这个区会被加入到FULL_FRAG链表。
  4. 附属某个段的区:每个段所属的区又会被组织成下面的几种链表。
    • FREE链表:在同一个段中,所有的页面都是空间页面的区对应的XDES Entry结构被加入到这个链表。

    • NOT_FULL链表:在同一个段中,仍有空闲页面的区对应的XDES Entry结构会被加入到这个链表。

    • FULL链表:在同一个段中,已经没有空闲页面的区对应的XDES Entry结构会被加入到这个链表。

每个段都会对应的一个INODE Entry结构,该结构中存储了一些与这个段有关的属性。
表空间中第一个页面的类型为FSP_HDR,它存储了表空间的一些整体以及第一个组内的256个区对应的XDES Entry结构。
除了表空间的第一个组以外,其余组的第一个页面的类型为XDES,这种页面的结构的FSP_HDR类型的页面对比,除了少了File Space Header部分之外,其余部分是一样的。
每个组中第二个页面的类型为IBUF_BITMAP,存储一些关于Change Bufferde信息。
表空间中第一个分组的第三个页面的类型是INODE,它是为了存储INODE Entry结构而设计的,这种类型的页面会组织成下面两个链表。

  • SEG_INODES_FULL链表:在该链表中,INODE类型的页面中已经没有空闲空间来存储额外的INODE Entry结构。

  • SEG_INODES_FREE链表:在该链表中,INODE类型的页面中还有空闲空间来存储额外的INODE Entry结构。

你可能感兴趣的:(《Mysql是怎样运行的》读书笔记之独立表空间结构)