MySQL存储页:高效数据管理的核心奥秘

Mysql的存储:页

在数据库系统中,‌**页(Page)‌ 是数据存储和管理的物理基础单元,其核心概念围绕高效存储、检索与内存交互设计。这个**和我们java开发中设计到的分页的页不是一个东西,java开发中的分页,指的是开发者指定条数返回的数据集合。

⚙️ 一、页的定义与作用

  1. 基本单位:
    • 页是 磁盘存储内存交互的 最小单元。数据库读写数据时,以固定大小的页为单位进行磁盘I/O操作,而非单条记录。
    • 默认大小:常见规格:4KB、8KB和16KB。(如MySQL InnoDB默认为16KB)
  2. 设计的目的:
    1. 减少磁盘I/O次数: 磁盘的速度和内存比起来是差着量级的,一次性读取整个页的数据而不是单行的数据,避免了频繁的I/O操作带来的性能损耗。
      1. 磁盘I/O的时间主要分为;
        • 寻道时间(Seek Time):磁头移动到数据所在磁道的物理耗时(约3-10ms)
        • 旋转时间(Rotation Latency):磁头通过磁盘旋转至目标扇区的时间。(7200RPM需要消耗0-4ms)
        • 数据传输时间(Transfer Time):实际的独写耗时(约0.1ms)
      2. 我们就可以发现如果单行(1KB)传输,一次传输的耗时,99%都在寻道和旋转上面,传输仅占1%。
      3. 整页独写,一次寻道传输16KB,单行的传输时间可以降至 0.5ms,性能大幅提升
    2. 优化内存管理‌:通过缓冲池(Buffer Pool)将热点数据页缓存到内存,加速访问。
  3. 存在的问题:内存被很多不必要的数据所占据,内存空间被浪费。系统一次读取16KB的数据,必然有很多数据其实是不必要的。
    1. 解决的方法:LRU策略。通过缓存池进行类LRU算法的方案进行数据页淘汰,释放空间。

🧱 二、页的内部结构

页由多个功能区组成,典型的结构包括:

  1. 页头:(page header):存储 元数据,例如:页号、上一页/下一页的指针、页类型(数据页/索引页)、事务ID等控制信息。
  2. 用户记录(customer records): 存储实际的数据行,每行内容包含数据内容系统隐藏列(如 事务ID).
  3. 页目录:槽(slot)结构,用于存储业内数据行的位置索引,支持二分查找快速定位记录。
  4. 空闲空间:未使用的区域,用于插入数据或者更新现有数据。
  5. 页尾:检验信息,例如校验和,用来确保数据的写入完整性.

🔗 三、页与存储层级的关系

数据库存储结构分层管理:

  1. 行(Row)→ 页(Page)→ 区(Extent)→ 段(Segment)
    1. 区:连续的页组成(例如:如InnoDB中1个区=64页=1MB),是空间分配的基本单位。是为了减少碎片化。
    2. 段:代表数据库对象(例如:表,索引等),是由一个或者多个区组成,随数据长度的增长动态扩展。
  2. 逻辑关系:页通过双向链表连接(文件头部的FIL_PAGE_PREV/FIL_PAGE_NEXT字段),支持跨页记录遍历
  3. 常见页类型:
类型用途
数据页存储表记录
索引页存储B+树索引信息
Undo页保存事务回滚日志
系统页管理表空间元数据
BLOB页存储大对象数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值