从上图可知道,我们在数据库服务器中每创建一个数据库则会在文件系统创建一个文件夹,所以说每个数据库对应的就是一个文件夹;
在上图可以看到ibdata1的文件夹,这就是我们常说的系统表空间的表述,innodb_data_file_path和innodb_data_home_dir两个参数可以修改系统表空间的位置

从上图可看出,我们在数据库中每创建一个表就会生成以 .frm 和 .ibd

  • .frm:该文件中主要储存表的结构、数据列的描述等修饰性信息
  • .ibd:该文件储存真实数据,也就是我们常说的独立表空间(MySQL5.5.7到MySQL5.6.6会将我们的数据默认储存到系统表空间中

  1. 组是由256个区组成的
  2. 每个区的大小是1m

extent(区)

  1. 区的出现是为了避免因两个逻辑连续的页在物理空间上距离太远而产生大量的随机io
  2. 区是连续的内存空间
  3. 区由64个页组成,连续的内存空间被分成64块每块,每块16kb
  4. 区的出现会造成空间的浪费,但是会减少大料的随机io

分类

状态 含义
FREE 空闲的区(直属表空间)
FREE_FRAG 有升序空间碎片的区(直属表空间)
FULL_FRAG 没有剩余空间碎片的区(直属表空间)
FSEG 附属于某个段的区

segment(段)

  为了节省空间mysql将B+树的叶子节点和非叶子节点,分开储存在不同的区;我们将存放叶子节点的区的集合称为段;叶子段和非叶子段是不同的段


整体表空间是由多种数据结构组成,其底层实现还是挺复杂的,这里我只是大概的列出了几种空间分类,具体的数据存储模式以及底层数据结构有兴趣的可以自行查阅相关文档