mysql数据物理结构

表空间:ibdata公用表空间文件,也可以通过配置innodb_file_per_table设置独立表空间文件

ibd独立表空间,只存储(数据,b+树索引,插入缓冲区)其余信息还是存储在ibdata中

Ibd存储了一个表的所有索引数据

一个表空间可以有多个文件,从0号文件开始

:构成索引,表,回滚段的基本元素 - 79 (主要作用管理逻辑单元)

重点:段是一个逻辑的概念,用来管理,参看段生成 - p85

创建索引时会创建两个段 1.内节点段,2.叶子段

一个表段的数目=索引数目*2 (ibd文件就是由段组成)

Inode:一个inode代表一个段

:extent,构成段的基本元素(主要作用,申请空间)

1.连续分配的一段空间

2.多个簇在段内是随机组织的

3.默认包含64个页面(固定大小)

页面:簇的组成单位,也是段管理的最小单位 - p80(主要作用管理物理单元)

段中没有任何空间脱离页面形式存在

一个页大小16kb

0号文件0号页面 

38号位置开始存储了表空间描述信息

38号前存储页面头信息

表空间信息和段信息中都存储了满簇链表,半满簇链表,空闲簇链表(双向链表)

簇描述页

一个簇描述页管理16384个页面 16384/40b = 256个簇,第一个簇为描述簇,实际管理255个簇

第一个簇(中第一个页面)被用来做簇描述页,未被加入表空间链表,不存储其它数据

通过描述符地址可得到后面连续64个页面的地址

b+树定位到页面,槽用于页面内搜索(多条记录对应一个槽)(一个槽2字节)

数据改变,修改槽的位置以确定数据顺序

槽内存储的是数据位置,数据之间通过链表相连

页面尾部

存储校验等信息,如果不完整说明数据断裂,两次写保证最终写入正常。

行格式(存储数据的具体格式)

行格式有三种存储方式

1.server层格式:适用所有存储引擎,row模式下binlog存储格式

2.索引元组格式:内存存储格式

3.物理存储格式:compact

变长字段长度存储(如果<128 || (<256 && !blob)) 1字节存储 否则2字节存储 

物理长度=extra_size+data_size

你可能感兴趣的:(mysql数据物理结构)