InnoDB的磁盘结构


一、InnoDB的磁盘结构

1、InnoDB磁盘主要包含

1.1 Tablespaces(表空间)

表空间分为系统表空间(ibdata1文件)(共享表空间)、临时表空间、常规表空间、Undo表空间和file-per-table表空间(独立表空间)。系统表空间又包括双写缓冲区(Doublewrite buffer)、Change Buffer

1.2DoubleWrite Buffer:

 InnoDB将数据页写到文件之前存放的位置

1.3Redo log:

 存储的是log buffer刷到磁盘的数据。

1.4undo logs:

存在于global临时表空间中,主要用于回滚事务

在这里插入图片描述
左边为内存结构图,右边的部分就是InnoDB的磁盘结构图。


二、表空间详解:

@1.系统表空间(System Tablespace)

系统表空间是一个共享的表空间,他是可以被多个表共享的。同时系统表空间可以分成多个文件,每个文件还可以存放到不同的磁盘上。同时他也有缺点,就是所有的数据和索引都是存放在一个文件中,如果数据量很大,那么索引维护效率就会很低。


@2.独立表空间(file-per-table)

是一个单表表空间,默认情况下表的数据文件创建于独立表空间中,同时他可以被系统自动回收的。该表是不能被拆分的,如果单表数据量过大,那么可能会出现单表很多个G的情况,这种情况可以用分库分表来处理。


@ 3.通用表空间(General Tablespace)

类似于系统表空间,也是一个共享表空间,可以存储多个表上的数据。他不是默认存在的,需要通过特殊语法才能创建的。他最大的特点是可以创建mysql数据库之外的,也就是自定义一个表空间。
当我们创建一张表,这张表肯定是存储在mysql文件下的,但是我们在创建表的时候,指定一个存储路径
例如:create table test.test_ger1(a int) data datadirectory=‘/mdata/general’;
这样表就创建到了mysql外部的地方,正常情况下,mysql的表文件下,会有.frm(表结构)、.ibd(表内容)两个文件,但此时/mdata/general下的test文件夹下只有.frm和.isl两种文件
*** datafile 指定存储路径后,在datadir下会产生一个isl文件,该文件的内容为General space的ibd文件的路径
如果datafile不指定路径,则ibd文件默认存储在datadir目录下,且不需要isl文件了


@4.撤销表空间(Undo Tablespace)

撤销表空间主要是用来保存回滚日志的,也就是undo log日志的数据。undo log的数据默认是存在系统表空间的ibdata1文件中的。5.7版本之前是没有撤销表空间的,都是存放在系统表空间中,但是在5.7版本之后,就单独开辟了一个撤销表空间,可以专门用来存放回滚日志数据。
那么如果想让undo log存放到撤销表空间该怎么操作呢?
有一个参数是控制是否将undo log日志存放到单独的表空间中,该变量是 innodb_undo_tablespaces,该值默认是0,0就是将数据存到默认的系统表空间中。


@5.临时表空间(Temporary Tablespace)

该空间主要是存储用户创建的临时表和磁盘内部的临时表。注意:mysql5.7版本之后,临时表的数据才会存储到临时表空间中,临时表空间所对应的文件是ibtmp开头的文件。在5.7之前,还是会存储到系统表空间的ibdata1文件中。该表空间的默认大小是12M(可以无限扩容)。我们也可以设置一个最大限制,可以避免该文件过大。

需要注意的一点,在mysql重启的时候,临时表空间的文件因为存放的都是临时数据,ibtmp文件会被释放掉。如果当该表数据过大,也可以通过重启mysql来达到释放该文件的一个效果。

扩展知识:

innodb整体结构包含:内存结构和磁盘结构(物理结构)相关知识可以阅读前面文章

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值