17. InnoDB-spaceID.PageNumber
表空间内部组织结构
表空间 |
内部由多个段对象(Segment)组成 |
每个段(Segment)由区(Extent)组成 |
每个区(Extent)由页(Page)组成 |
每个页(Page)里面保存数据(或者叫记录 Row) |
- 段对用户来说是透明的
- 段也是一个逻辑概念
- 目前为止在information_schema中无法找到段的概念
- 重点需要理解区(Extent)和页(Page)的概念
表空间-页
页的定义
- 页是最小的I/O操作单位
- data最小的单位不是页,而是页中的记录(Row)
- 普通用户表中MySQL默认的每个页为16K
- 从MySQL 5.6开始使用innodb_page_size可以控制页大小
- 一旦数据库通过innodb_page_size创建完成,则后续无法更改
- innodb_page_size是针对普通表的,压缩表不受其限制
如何定位到页
- 每个表空间都对应一个SpaceID,而表空间又对应一个ibd文件,那么一个ibd文件页对应一个SpaceID
- 因为表空间 <-> ibd文件,表空间 <-> SpaceID,所以ibd文件 <-> SpaceID
- ibdata1对应的SpaceID为0
- 每创建一个表空间(ibd文件),SpaceID自增长(全局)
- PageNumber
- 在一个表空间中,第几个16K的页(假设innodb_page_size = 16K)即为PageNumber
1. 可以通过( SpaceID , PageNumber )定位到某一个页
2. 在一个 SpaceID (ibd文件)中,PageNumber是唯一且自增的
3. 这里的区(extent)的概念已经弱化。在这个例子中,第一个区的PageNumber是(0~63)且这 64个页在物理上是连续的;第二个区的PageNumber是(64~127)且这64个页在物理上也是连续 的;但是(0~63)和(64~127)之间在物理上则不一定是连续的,因为区和区之间在物理上不一定是连续的。
4. 删除表的时候,SpaceID不会回收,SpaceID是全局自增长的。
root@mysqldb 13:22: [information_schema]> select * from INNODB_TABLESPACES where space = 19\G
*************************** 1. row ***************************
SPACE: 19
NAME: gavin/test_index_2
FLAG: 16417
ROW_FORMAT: Dynamic
PAGE_SIZE: 16384
ZIP_PAGE_SIZE: 0
SPACE_TYPE: Single -- 独立表空间
FS_BLOCK_SIZE: 4096
FILE_SIZE: 147456
ALLOCATED_SIZE: 147456
AUTOEXTEND_SIZE: 0
SERVER_VERSION: 8.0.36
SPACE_VERSION: 1
ENCRYPTION: N
STATE: normal
1 row in set (0.00 sec)
应用:
https://www.cnblogs.com/gavin-zheng/p/18122911
标签:ibd,SpaceID,PageNumber,spaceID,空间,innodb,SIZE From: https://www.cnblogs.com/hsjz-xinyuan/p/18457345