提示:mysql表空间、段、区、页的关系详细描述
文章目录
- 表空间-TABLE SPACE
- 1 查看
- 表空间相关参数
- 段(segment)
- 区(extent)
- 页(page)
表空间-TABLE SPACE
从 InnoDB 逻辑存储结构来看,所有的数据都被逻辑的存放在一个空间中,这个空间就叫做表空间(tablespace)。表空间由 段(segment)、区(extent)、页(page)组成。
lnnoDB存储引擎的逻辑存储结构和 Oracle大致相同 ,所有数据都被逻辑地存放在一个空间中 ,我们称之为表空间 ( tablespace ) 。表空间又由段 ( segment ) 、区 ( extent ) 、页 ( page ) 组成 。页在一些文档中有时也称为块(block) , InnoDB存储引擎的逻辑存储结构大致如上一张的图片一样。
表空间可以看做是InnoDB存储引擎逻辑结构的最高层 ,所有的数据都是存放在表空间中。默认情况下 InnoDB存储引擎有一个系统表空间 ,即innoDB data dictionary(InnoDB元数据信息)、doublewrite buffer(双写缓冲区)、change buffer(改变缓冲区)、undo logs都放在这个表空间内 。如果我们启用了参数innodb_file_per_table ,则每张表内的数据可以单独放到一个表空间内
1 查看
show variables like ‘innodb_file_per_table’;
show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.01 sec)
innodb_file_per_table 是否开启单表表空间,该参数为全局参数,可动态修改,默认为ON,如果设置为OFF,在没有显式指定表空间情况下,数据及索引默认存放到系统表空间ibdata下
表空间相关参数
innodb_data_file_path : 表空间大小及文件个数由该参数决定,该参数为全局参数,不可动态修改,默认值为 ibdata1:12M:autoextend,默认的12M大小是根据innodb_page_size按最大值指定的,为了确保其空间可以容纳doublewrite buffer pages,则:
innodb_page_size为16K时(MySQL默认值) 最小值为3M
innodb_page_size为32K时 最小值为6M
innodb_page_size为64K时 最小值为12M
段(segment)
段(Segment)分为索引段,数据段,回滚段等。其中索引段就是非叶子结点部分,而数据段就是叶子结点部分,回滚段用于数据的回滚和多版本控制。一个段包含256个区(256M大小)。
一个段包含多少区:256个区
区(extent)
区是页的集合,一个区包含64个连续的页,默认大小为 1MB (64*16K)。
页(page)
页是 InnoDB 管理的最小单位,常见的有 FSP_HDR,INODE, INDEX 等类型。所有页的结构都是一样的,分为文件头(前38字节),页数据和文件尾(后8字节)。页数据根据页的类型不同而不一样。
每个空间都分为多个页,通常每页16 KiB。空间中的每个页面都分配有一个32位整数页码,通常称为“偏移量”(offset),它实际上只是页面与空间开头的偏移量(对于多文件空间,不一定是文件的偏移量)。因此,页面0位于文件偏移量0,页面1位于文件偏移量16384,依此类推。 (InnoDB 的数据限制为64TiB,这实际上是每个空间的限制,这主要是由于页码是32位整数与默认页大小的组合