MySQL的逻辑存储结构
从InnoDB存储引擎的逻辑结构看,所有数据都被逻辑地存放在一个空间内,称为表空间,而表空间由段(sengment)、区(extent)、页(page)组成。ps:页在一些文档中又称块(block)。
表空间
表空间分为了两种,这里简单的概括一下:
-
独立表空间:每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有一个.ibd文件。 其中这个文件包括了单独一个表的数据内容以及索引内容,默认情况下它的存储位置也是在表的位置之中。
-
共享表空间: Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。
InnoDB把数据保存在表空间内,表空间可以看作是InnoDB存储引擎逻辑结构的最高层。本质上是一个由一个或多个磁盘文件组成的虚拟文件系统。InnoDB用表空间并不只是存储表和索引,还保存了回滚段、双写缓冲区等。
根据每个表的信息通道配置,有许多类型的表空间。如下:
- 系统表空间
- 表文件表空间
- 通用表空间
- undo表空间
- 临时表空间
段
表空间是由各个段组成的,常见的段有数据段、索引段、回滚段等。
区
区是由连续的页(Page)组成的空间,在任何情况下每个区大小都为1MB,为了保证页的连续性,InnoDB存储引擎每次从磁盘一次申请4-5个区。默认情况下,InnoDB存储引擎的页大小为16KB,即一个区中有64个连续的页。 (1MB/16KB=64)
InnoDB1.0.x版本开始引入压缩页,每个页的大小可以通过参数KEY_BLOCK_SIZE设置为2K、4K、8K,因此每个区对应的页尾512、256、128.
InnpDB1.2.x版本新增了参数innodb_page_size,通过该参数可以将默认页的大小设置为4K、8K,但是页中的数据不是压缩的。
但是有时候为了节约磁盘容量的开销,创建表默认大小是96KB,区中是64个连续的页。(对于一些小表)
页
页是InnoDB存储引擎磁盘管理的最小单位,每个页默认16KB;InnoDB存储引擎从1.2.x版本碍事,可以通过参数innodb_page_size将页的大小设置为4K、8K、16K。若设置完成,则所有表中页的大小都为innodb_page_size,不可以再次对其进行修改,除非通过mysqldump导入和导出操作来产生新的库。
innoDB存储引擎中,常见的页类型有:
-
数据页(B-tree Node)
-
undo页(undo Log Page)
-
系统页 (System Page)
-
事物数据页 (Transaction System Page)
-
插入缓冲位图页(Insert Buffer Bitmap)
-
插入缓冲空闲列表页(Insert Buffer Free List)
-
未压缩的二进制大对象页(Uncompressed BLOB Page)
-
压缩的二进制大对象页 (compressed BLOB Page)
数据页
数据页中可以存储各种类型的数据,如表数据、索引数据、簇数据等。无论存放何种数据,数据页都有相同的结构
行
InnoDB存储引擎是面向列的(row-oriented),也就是说数据是按行进行存放的,每个页存放的行记录也是有硬性定义的,最多允许存放16KB/2-200,即7992行记录。
来源:CSDN
作者:q435201823
链接:https://blog.csdn.net/q435201823/article/details/103548763