Mysql存储结构-页的概念
目录一、Innodb中页的概念1、page头部2、记录在页中的存储二、页内记录维护的顺序保证1、逻辑有序和物理有序2、槽管理mysql数据库的数据存储结构是通过表空间(table space)->段(segment)->区(或者簇extends)->页(page)进行管理。一、Innodb中页的概念页,是InnoDB中数据管理的最小单位。当我们查询数据时,其是以页为单位,将磁盘中
目录
mysql数据库的数据存储结构是通过表空间(table space)->段(segment)->区(或者簇extends)->页(page)进行管理。
一、Innodb中页的概念
页,是InnoDB中数据管理的最小单位。当我们查询数据时,其是以页为单位,将磁盘中的数据加载到缓冲池中的。同理,更新数据也是以页为单位,将我们对数据的修改刷回磁盘。
Page是Innodb存储的最基本结构,也是Innodb磁盘管理的最小单位,与数据库相关的所有内容都存储在Page结构里。Page分为几种类型:
数据页(B-Tree Node)
,Undo页(Undo Log Page)
,系统页(System Page)
,事务数据页(Transaction System Page)
每个数据页的大小为
16kb
,每个Page使用一个32位(一位表示的就是0或1)的int值来表示,正好对应Innodb最大64TB的存储容量(16kb * 2^32=64tib)
mysql中的具体数据是存储在行中的,而行是存储在页中的,每页的默认大小为16k(大小可以通过配置文件修改),页的结构如下图所示
1、page头部
page头部保存了两个指针,分别指向前一个Page和后一个Page,头部还有Page的类型信息和用来唯一标识Page的编号。根据这个指针分布可以想象到Page链接起来就是一个双向链表
2、记录在页中的存储
数据页的结构
一开始生成页的时候并没有User Records这个部分.每当我们插⼊⼀条记录,都会从Free Space部分,也就是尚未使⽤的存储空间中申请⼀个记录⼤⼩的空间划分到User Records部分,当Free Space部分的空间全部被User Records部分替代掉之后,也就意味着这个页使⽤完了,如果还有新的记录插⼊的话,就需要去申请新的页了。
二、页内记录维护的顺序保证
1、逻辑有序和物理有序
保证数据的存储顺序有两种方式:物理有序和逻辑有序
物理有序:比如数组,存储都是连续的空间,查询速度很快,但是删除和移动数据非常麻烦
逻辑有序:比如链表,数据不是存储在连续的空间上,而是通过指针维护数据之间的顺序关系。查询需要遍历,但是数据移动代价比较小。
mysql数据库采用逻辑有序的方式来维护数据顺序,通过一定的数据结构来优化查询。
2、槽管理
数据记录在页内是如何保持有序的呢?答案就是槽管理。下图中的Slot区
Innodb是多条记录对应一个槽,而槽的作用就是用来在页面内进行数据搜索的,因为查找一条数据时,是用B+tree来保证通过树形结构找到一个记录所在的页,而在页内部真正找到这条记录是通过槽来完成的。
在页内部,Innodb划分出一个区域比如10byte,作为槽的区域(当然槽的区域根据使用的大小是可以变化的),一个槽占用2个字节。那么现在可以将这个槽看作是长度大小为5的数组了。
关于存储引擎:MySQL存储底层技术:InnoDB底层原理解读
更多推荐
所有评论(0)