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

InnoDB 逻辑存储结构

作者头像
十毛
发布2021-01-29 10:41:42
9930
发布2021-01-29 10:41:42
举报

InnoDB的数据大部分都是保存在表空间中,包括索引,数据和插入缓存

逻辑结构

InnoDB存储引擎的逻辑存储结构和 Oracle大致相同 ,所有数据都被逻辑地存放在一个空间中 ,我们称之为表空间 ( tablespace ) 。表空间又由段 ( segment ) 、区 ( extent ) 、页 ( page ) 组成 。 InnoDB存储引擎的逻辑存储结构大致如图4-1所示。

InnoDB逻辑存储结构

  • 表空间(tablespace):表空间可以看做是InnoDB存储引擎逻辑结构的最高层 ,所有的数据都是存放在表空间中。已经介绍了默认情况下 InnoDB存储引擎有一个共享表空间 ibdata1 ,即所有数据都放在这个表空间内 。如果我们启用了参数innodb_file_per_table,则每张表内的数据可以单独放到一个表空间内 。
  • 段(segment):表空间由多个段组成,每一个索引在表空间中都有两个段,分别是叶子节点的段和非叶子节点的段。叶子节点保存在一个段内,可以更好的保持叶子节点的连续性,可以提升访问磁盘的效率(因为数据是保存在叶子节点上的)
  • 区(extend):多个页组成一个区(extend),对于不大于16K的页来说,一个区是1M(64个连续的16K页或者128个8K或者256个4K),对于大于16K的页,都都是连续64个页组成一个区,比如128K的页对应2M的区,256的页对应4M的区
  • 页(page):固定大小的一段连续空间,默认是16K,可以通过参数nnodb_page_size设置

对于启用了innodb_file_per_table的参数选项,需要注意的是 ,每张表的表空间内存放的只是数据、索引和插入缓冲 ,其他类的数据,如撤销( undo log) 信息、系统事务信息、 二次写缓冲 (double write buffer ) 等还是存放在原来的共享表空间内。

数据行与表空间页的关系

对于<=32K的页,其最大的行大小略小于页大小的一半,比如16K的页对应的行大小为略小于8K。对于大于32K的页,则略小于16K。 如果行内容小于最大行大小,则全部保存在页内,如果超过,InnoDB则会把可变大小的列保存到页外存储(external off-page storage)。(其实也在页里,只不过不在之前的两个页内,而是在一个溢出页,而且每个列都有自己的溢出页)

参考

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 逻辑结构
  • 数据行与表空间页的关系
  • 参考
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档