1.官网
https://dev.mysql.com/doc/refman/5.7/en/innodb-disk-management.html
https://dev.mysql.com/doc/refman/5.7/en/innodb-file-space.html
1.MySQL 的存储结构分为 5 级:表空间、段、簇、页、行
2.tablespace [表空间]
1.表空间可以看做是InnoDB 存储引擎逻辑结构的最高层,所有的数据都存放在表空间中。
2.表空间分为:系统表空间、独占表空间、通用表空间、 临时表空间、Undo 表空间。
参考 下面的Mysql InnoDB 磁盘存储结构中对表空间的介绍
https://blog.csdn.net/u014636209/article/details/103989376
3.segment [段]
1.创建一个索引会创建两个段,一个是索引段:leaf node segment,一个是数据段: non-leaf node segment。
2. 段的数量是由索引的数量决定的,也就是说,一个表的段数,就是索引的个数乘以 2。
3. 段的空间大小是可以无限扩展的;
4.extent [簇或者成为区]
1.一个段(Segment)又由很多的簇(也可以叫区)组成,每个区的大小是 1MB(64 个连续的页)。
2.extent的个数扩展是由段的内存大小去决定的;
5.page [页]
1.为了高效管理物理空间,对簇进一步细分,就得到了页。
2.簇是由连续的页(Page) 组成的空间,默认每个页的存储大小为16k(1024*16=16384 byte字节),一个簇中有 64 个连续的页。
(1MB/16KB=64)。这些页面在物理上和逻辑上都是连续的。
查看当前每个页的存储大小
show VARIABLES like '%innodb_page_size%'
1.一个表空间最多拥有 2^32 个页,默认情况下一个页的大小为 16KB,也就是说一个 表空间最多存储 64TB 的数据。
6.row [行]
InnoDB 存储引擎是面向行的(row-oriented),也就是说数据的存放按行进行存放。
查看数据和索引存储占用的磁盘空间大小
select CONCAT(ROUND(SUM(DATA_LENGTH/1024/1024),2),'MB') AS data_len,
CONCAT(ROUND(SUM(INDEX_LENGTH/1024/1024),2),'MB') as index_len
from information_schema.TABLES where table_schema='gp-mysql' and table_name='user_innodb';