mysql des_MySQL · 引擎特性 · InnoDB 文件系统之文件物理结构

本文详细介绍了InnoDB存储引擎的文件系统结构,包括页的组成、页类型的校验和、页序号、页链接、LSN、页类型等。此外,还阐述了表空间的管理,如页的分组(区)、段、区和页的关系,以及表空间的FSP_HDR、IBUF_BITMAP和INODE页的作用。通过对这些基础结构的理解,有助于深入掌握InnoDB的数据存储和管理机制。
摘要由CSDN通过智能技术生成

综述

从上层的角度来看,InnoDB层的文件,除了redo日志外,基本上具有相当统一的结构,都是固定block大小,普遍使用的btree结构来管理数据。只是针对不同的block的应用场景会分配不同的页类型。通常默认情况下,每个block的大小为 UNIV_PAGE_SIZE,在不做任何配置时值为16kb,你还可以选择在安装实例时指定一个块的block大小。对于压缩表,可以在建表时指定block size,但在内存中表现的解压页依旧为统一的页大小。

从物理文件的分类来看,有日志文件、主系统表空间文件ibdata、undo tablespace文件、临时表空间文件、用户表空间。

由于数据库需要保证数据的完整性,因此在OS系统上封装了自己的文件系统。我们来看一张图,这样也能更好的理解innodb数据库的文件结构

a0ef42bfb53d6b9276744d532ec7998e.png

首先看一下页(page)的结构

之前有说过,一个表空间文件都是由一个一个16kb的页组成,每个页都有一个32位序号(page number),通常称为偏移量,即离表空间初始位置的偏移量.因为每个页大小为16kb,所以第0个页的偏移量为0,第一个页的偏移量为16384等等.因为32位的最大值为2^32,所以一个表空间的最大值为2^32*16kb=64TB.

1ef31c2870db3e6beb98c56317c285e8.png

1. Checksum为校验和,和磁盘打交道的程序为了保证数据正确性,都必须使用校验和,目的是验证因为磁盘空间损坏导致数据损坏;

2. offset(Page Number)为页的序号,即偏移量;

3. Previous Page和Next Page InnoDB的数据在内存缓冲区是由B+树组织的,而B+树中的每一层的页是由双向链表串起来,因为每个页header有指向上一个和下一个页的指针;这种结构可以提升全表扫描的效率;

4. LSN for last page modification LSN如果不懂,可以查看InnoDB存储引擎这本书,简单说就是用于表示刷新到重做日志数据量,可用于重做日志恢复数据库.

5. Page Type 即页的类型,页的类型决定了这个页其他部分存储的数据,常见的页类型有数据业,undo页,系统页等等;

6. flush LSN 这个值存储了刷新到整个系统任何页的最大LSN值.

7. space id 存储page所在的space id

76a7c777dd6372eeeb43a68d53c7f55a.png

接下来我们来看一下表空间(Tablespace)的一些基础知识

表空间是分段管理的,假如有一个表只有一个主键索引,那么这个表就有两个段,一个是内部节点段,即非叶子节点段,还有一个是叶子段,即存储数据的节点.如果一个表除了主键索引,还有一个辅助索引,那么这个这个表空间有四个段,主键内部节点段,主键叶子节点段,辅助索引内部节点段,辅助索引叶子节点段.InnoDB存储引擎有有一张图很好展示了段,区,页的关系:

55ffb4e4595358d105fd59fa7aba72bb.png

当然共享表空间ibdata和用户表空间是不一样的,因为它需要存储更多全局的一些信息,例如

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值