InnoDB 存储引擎<二>页结构和行结构

目录

⻚结构

⾏结构 

⻚结构

⻚在MySQL运⾏的过程中起到了⾮常重要的作⽤,为了能发挥更好的性能,可以结合⾃⼰系统的
业务场景和数据⼤⼩,对⻚相关的系统变量进⾏调整,⻚的⼤⼩就是⼀个⾮常重要的调整项
1.⻚的⼤⼩可以设置吗?
分析过程:
1.前面介绍了每个数据⻚默认为 16KB ,是操作系统"数据块" 4KB的整数倍,那么只要保证⻚的⼤⼩是操作系统"数据块" ⼤⼩的整数倍是不是也可以呢,答案是肯定的。
2.MySQL提供了⼀个专⻔的系统变量来控制⻚的⼤⼩,可以通过系统变量 innodb_page_size 进⾏调整与查看,在调整⻚⼤⼩的时候需要保证设置的值是操作系统"数据块" 4KB的整数倍,从⽽保证通过操作系统和磁盘交互时"数据块"的完整性,不被分割或浪费,所以规定了
innodb_page_size 可以设置的值,分别是 4096 8192 16384 32768 65536 ,对应 4KB 8KB 16KB 32KB 64KB
解答问题:
可以通过系统变量 innodb_page_size 进⾏调整与查看,但要保证设置的值是操作系统"数据
块" 4KB的整数倍,MySQL规定 innodb_page_size 可以设置的值,分别是 4096
8192 16384 32768 65536 ,对应 4KB 8KB 16KB 32KB 64KB

2.⻚都有哪些分类?我们需要重点学习哪种⻚?

解答问题:

(1)InnoDB在不同的使⽤场景定义多种不同类型的⻚,常⽤的有 数据⻚ Undo Log
Change Buffer Extent Descriptor(XDES) InnoDB 段信息⻚ 等,每种⻚的
数据结构都不相同,其中最需要我们关注的就是数据⻚,由于InnoDB中有个概念叫 "索引即数据",所以也叫做索引⻚。
(2)不论哪种类型的⻚都具有⻚头(File Header)和⻚尾(File Trailer)两个信息

3.⻚头和⻚尾具体包含了哪些信息?

前置知识:

1.数据页是MySQL中定义的一个存储结构,也是保存数据行的容器

2.要讨论其结构的话,首先要明白的三个问题:

  (1)数据页具有哪些属性? ---对数据页进行描述

   (2) 数据页之间如何进行关联? ---通过双向链表连接每个页

     当前区的最后一个页与后一个区的第一个页通过双向链表的方式关联

    (3) 数据页中如何组织数据行

      通过页主体的具体功能实现

解答问题:
⻚头和⻚尾中包含的是⽤来描述⽂件相关的信息,如下图所示

 1.⻚头 - File Header

(1)⻚号: FIL_PAGE_OFFSET 占⽤ 4Byte ,相当于⻚的⾝份证号,通过这个⻓度可以计算出每个InnoDB表中最多可以拥有 2^(4*8)-142亿 个⻚,表空间第⼀个⻚编号从0开始,之后的⻚号分别是1,2,3…依此类推,具体⻚的偏移量计算公式为:⻚号 * 每⻚⼤⼩;那么按照每个⻚默认16KB⼤⼩计算,⼀个表空间最⼤容量为 2^(4*8) * 16KB = 64TB ,这也是InnoDB表空间最⼤容量是64T的原因;

(2)上⼀⻚⻚号: FIL_PAGE_PREV

(3)下⼀⻚⻚号: FIL_PAGE_NEXT 多个⻚通过这两个信息组成双向链表,即使不同的⻚地址不连续,也可以通过链表连接

(4)表空间ID: FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID ,当前⻚属于哪个表空间

(5)⻚类型: FIL_PAGE_TYPE ,数据⻚对应的⻚类型是 FIL_PAGE_INDEX = 0x45BF(常量)

(6)最近⼀次修改的LSN: FIL_PAGE_LSN ,占⽤8Byte

(7)已被刷到磁盘的LSN: FIL_PAGE_FILE_FLUSH_LSN ,占⽤8B
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值