前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL InnoDB 存储结构

MySQL InnoDB 存储结构

作者头像
yingzi_code
发布2019-08-31 12:44:30
1.5K0
发布2019-08-31 12:44:30
举报
MySQL InnoDB 存储结构
InnoDB存储引擎的关键特性包括:
  1. 插入缓冲(Insert Buffer)
  2. 两次写(Double Write)
  3. 自适应哈希索引(Adaptive Hash Index)
  4. 异步IO(Async IO)
  5. 刷新邻接页
从逻辑上讲

所有的数据都被逻辑的放在一个空间中,称为tablespace

在这里插入图片描述
在这里插入图片描述

由上图可以看出,tablespace由segment组成,segment由extend组成,extend由page组成,page由row组成 在MySQL中默认会有一个共享表空间ibdata1,如果设置了innodb_file_per_table=on时,每张表内的数据放在各自的tablespace中,私有tablespace仅包括数据,索引,插入缓冲Bitmap页,而其他的例如回滚信息,插入缓冲索引页,系统事务信息,二次写缓冲等都还是放在共享表空间

  • 常见的段有数据段,索引段,回滚段
  • 区连续的页组成的空间,任何情况下区的大小都为1MB 为了保证区中页的连续性,InnoDB一次从磁盘中申请4~5个区,默认情况下,页的大小为16K,即一个区有64个页 注:在启用了innodb_file_per_table之后,创建的表默认大小是96K,每个段开始时有32个页大小的碎片页(fragment page)来存放数据,当这些页使用完成以后,才是32+64个连续页的申请
  • 页是innodb磁盘管理的最小单位,默认大小是16K 常见的页有:数据页,undo页,系统页,事务数据页等
  • 数据是按行存放的,每页最少两行数据,最多7992行 溢出行数据存放:INNODB存储引擎是索引组织的,即每页中至少有两行记录,因此如果页中只能存放一行记录,INNODB会自动将行数据放到溢出页中。当发生溢出行的时候,实际数据保存在BLOB页中,数据页只保存数据的前768字节(老的文件格式),新的文件格式(Barracuda)采用完全行溢出的方式,数据页只保存20个字节的指针,BLOB也保存所有数据

数据页的结构: File Header(文件头)–>38byte Page Header(页头)–>56byte Infimun+Supremum Records User Records(用户记录,即行记录) Free Space(空闲空间) Page Directory(页目录) File Trailer(文件结尾信息)–>8byte

在这里插入图片描述
在这里插入图片描述
从物理上讲

InnoDB是基于磁盘储存的,并将其记录按照页的方式管理,因此可将其视为基于磁盘的数据库系统。由于cpu的数据和磁盘速度之间的鸿沟,因此需要缓冲池技术来提高数据库的整体性能

在这里插入图片描述
在这里插入图片描述

缓冲池技术简单来说就是一块内存区域,通过内存的速度来弥补磁盘速度较慢对于数据库性能的影响。在数据库中进行页的操作,首先将磁盘读到的页放在缓冲池中,这个过程称为将页‘FIX’到缓冲池中,下一次再读取相同的页时,先判断是否在缓冲池中,若存在,则称该页在缓冲池中被命中,直接从缓冲池中读取,若不存在,则从磁盘中读取。

在这里插入图片描述
在这里插入图片描述

缓冲池通常是通过LRU算法进行管理,同时还加入midpoint位置,新读取的页,将不会放到链表头端,而是放到midpoint的位置,默认配置下,该位置位于5/8处

参考:

  1. 高性能MySQL 第3版
  2. MySQL技术内幕-InnoDB存储引擎 第2版
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年09月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL InnoDB 存储结构
  • InnoDB存储引擎的关键特性包括:
  • 从逻辑上讲
  • 从物理上讲
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档