MySQL 基础知识梳理学习(二)----记录在页面层级的组织管理
1.InnoDB的数据存储结构
InnoDB中数据是通过段、簇、页面构成的。

(1)段是表空间文件中的主要组织结构,它是一个逻辑概念,用来管理物理文件,是构成索引、表、回滚段的基本元素。创建一个索引(B+树)时会同时创建两个段,分别是内节点段和叶子段,内节点段用来管理(存储)B+树中非叶子节点(页面)的数据,叶子节点用来管理(存储)B+树中叶子节点数据。一个索引包括2个段,那么一个表的段的数目,就是索引的个数乘以2了。
(2)簇是构成段的基本元素,一个段有若干个簇构成。一个簇是物理上连续分配的一段空间,每个段至少有一个簇,在创建一个段时就会默认创建一个簇。如果存储数据时,一个簇已经不足以放下更多的数据,此时需要从这个段中分配一个新的簇来存放新的数据。一个段所管理的空间大小是无限的,可以一直扩展下去,但扩展的最小单位是簇。簇的空间大小是固定的,一般为64个页面。
一个索引是由两个段组成的,两个段之间的物理位置是没有关系的,而每个段由多个簇组成,多个簇之间的物理位置也是没有关系的。
(3)簇的物理空间内部还可以继续被切分并高效管理。“页面”就是簇在细化之后的产物,它是簇的组成单位,也是段所管理的最小单位、数据库文件管理的最小单位,也是文件中空间分配的最小单位。一个页面默认为16KB。一个簇中可以包含多个页面(默认64)个页面,这个页面数通常被称为“簇的大小”。这些页面都归这个簇管理,在逻辑上(页面号都是从小到到连续的)以及物理上都是连续的。
2.页面是如何对记录组织管理的
InnoDB是使用B+树来保证通过树形结构找到一个记录所在的页面,而在页面内部真正找到这条记录是通过“槽”来完成的。槽的作用是用来在页面内进行数据搜索的,在InnoDB存储引擎中,多条记录对应一个槽。

槽位于页面的最后位置,其长度与页面内存储的记录数有关。
槽中数据的增长是以高字节到低字节的顺序存储的,最高位的槽代表的是页面内索引顺序最小的记录,而低槽位代表的是索引顺序最大的记录,即在页面内,通过槽位置的顺序,来表示业内所有记录的顺序。
可以将槽理解为是一个以下标值为元素值的可自由扩展的数组。并且,这个数组是有序的,在不断增删改的过程中,都会修改这个数组,该平移的平移,该删除的删除,但需要保证的是,每次操作完成之后,槽的数组还是有序的。当然,真实的数组元素值不会是下标,从上面的示意图可以看出,真正的值是页面内槽所对应的记录在页面内的偏移量。所以,如果,页面内数据发生了改变,只需要修改槽的位置即可变相地修改页面内数据的大小关系了。
我们知道,在每条记录开始位置之前的两个字节,是用来存储下一条记录的指针信息的,所以在每一个槽指向的最后一条记录前面,为了体现它会指向下一个槽的第一条记录,都会有一个指向说明框,用来说明指向的值是多少、位置是多少。
从示意图中可以看出,槽中存储的数据是没有顺序的,因为它们是槽所对应的第一个记录在页面内的偏移量,比如第0号位存储的989,这说明本页内最小的记录在偏移为989的位置存储,这个槽对应的数据还可以查询到2、3、4,他们是通过链表连接起来的。值为4的记录是第0号槽的最后一条记录,值为4的记录指向的下一个记录为偏移为289位置值为6,这个位置正好是第1位的槽,第1号槽包括的数据有6、9、11、11、15这四个值。依次类推,可以从槽数据出发,找到页面内所有记录,并且数据都是有序的,可以利用二分查找的方法快速搜索定位找到所需的记录。
最后补充说明一点,页面最后的8个字节,主要存储的页面校验的CHECKSUM值(前四节)和当前页面最新被修改的LSN值(后四节)。
-----主要部分内容参考梳理于网络知识,此仅为学习笔记,在此原创作者感谢!
MySQL 基础知识梳理学习(二)----记录在页面层级的组织管理的更多相关文章
- MySQL 基础知识梳理学习(五)----详解MySQL两次写的设计及实现
一 . 两次写提出的背景或要解决的问题 两次写(InnoDB Double Write)是Innodb中很独特的一个功能点.因为Innodb中的日志是逻辑的,所谓逻辑就是比如插入一条记录时,它可能会在 ...
- MySQL 基础知识梳理学习(七)----sync_binlog
一般在生产环境中,很少用MySQL单实例来支撑业务,大部分的MySQL应用都是采用搭建集群的方法.搭建MySQL集群,可以进行数据库层面的读写分离.负载均衡或数据备份.基于MySQL原生的Replic ...
- MySQL 基础知识梳理学习(四)----GTID
在日常运维中,GTID带来的最方便的作用就是搭建和维护主从复制.GTID的主从模式代替了MySQL早期版本中利用二进制日志文件的名称和日志位置的做法,使用GTID使操作和维护都变得更加简洁和可高. 1 ...
- MySQL 基础知识梳理学习(三)----InnoDB日志相关的几个要点
1.InnoDB的特点 :(1)Fully ACID (InnoDB默认的Repeat Read隔离级别支持):(2)Row-level Locking(支持行锁):(3)Multi-version ...
- MySQL 基础知识梳理学习(五)----半同步复制
1.半同步复制的特征 (1)从库会在连接到主库时告诉主库,它是不是配置了半同步. (2)如果半同步复制在主库端是开启了的,并且至少有一个半同步复制的从节点,那么此时主库的事务线程在提交时会被阻塞并等待 ...
- MySQL 基础知识梳理学习(一)----系统数据库
information_schema 此数据库是MySQL数据库自带的,主要存储数据库的元数据,保存了关于MySQL服务器维护的所有其他数据库的信息,如数据库名.数据库表.表列的数据类型及访问权限等. ...
- MySQL 基础知识梳理学习(六)----锁
1.什么是锁: 对共享资源进行并发访问控制,提供数据的完整性和一致性. 2.锁的区别: 类型 lock latch 对象 事务 线程 保护 数据库内容 内存数据结构 持续时间 整个事务过程 临界资源 ...
- MySQL 基础知识梳理
MySQL 的安装方式有多种,但是对于不同场景,会有最适合该场景的 MySQL 安装方式,下面就介绍一下 MySQL 常见的安装方法,包括 rpm 安装,yum 安装,通用二进制安装以及源码编译安装, ...
- [SQL] SQL 基础知识梳理(二) - 查询基础
SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...
随机推荐
- JS对json操作的扩展
一.JSON对象 JSON是 JavaScript 的原生对象,用来处理 JSON 格式数据.它有两个静态方法:JSON.stringify()和JSON.parse(). JSON.stringif ...
- Web Api Self-Host
今天有在研究SignalR, 发现SignalR可以使用Self-Host的方式,就突发奇想,Web Api是不是也可以使用Self-Host的方式寄宿在Console Application或者其他 ...
- linux内核中听过就能记住的概念
打算给我们部门弄个内部分享.发现大家对一些底层知识的认知停留在一句一句的,比如听说JVM使用-XX:-UseBiasedLocking取消偏向锁可以提高性能,因为它只适用于非多线程高并发应用.使用数字 ...
- Paramiko模块简单使用
介绍 Paramiko 一个第三方包,需要单独安装我们知道远程批量主机管理,比如ansible.Fabric,不需要安装客户端的远程执行命令等,这些都是基于Python原生的SSH,相当于模拟了一个S ...
- window环境下使用filezilla server搭建ftp服务器
前言 在做项目的时候,需要提供ftp服务,开始的时候使用微软自动的iss上的ftp服务,一段时间后发现无法自定义用户,只能使用系统的用户,使用起来很不方便,在权限管理方面也是不太好.所以换用了file ...
- mysql数据库迁移文档
数据库迁移文档 一.需求 确保数据库稳定的运行,为开发人员提供方便的测试数据库和生产数据库的环境. 二.数据库整体架构(master/slave) 1.slave数据库安装 rpm -Uvh http ...
- Dockerfile 中的 COPY 与 ADD 命令
Dockerfile 中提供了两个非常相似的命令 COPY 和 ADD,本文尝试解释这两个命令的基本功能,以及其异同点,然后总结其各自适合的应用场景. Build 上下文的概念 在使用 docker ...
- [十二]JavaIO之BufferedInputStream BufferedOutputStream
功能简介 BufferedInputStream 和 BufferedOutputStream一样,他们都是过滤流 装饰器模式下具体的装饰类 用来装饰InputStream以及OutputStream ...
- eclipse 创建maven 项目 动态web工程完整示例 maven 整合springmvc整合mybatis
接上一篇: eclipse 创建maven 项目 动态web工程完整示例 eclipse maven工程自动添加依赖设置 maven工程可以在线搜索依赖的jar包,还是非常方便的 但是有的时候可能还需 ...
- 搞懂Linux下的几种文件类型
在Linux系统下,有七类文件类型: 普通文件(-) 目录(d) 软链接(字符链接L) 套接字文件(S) 字符设备(S) 块设备(B) 管道文件(命名管道P) 普通文件.目录.软链接无需多解释. 管道 ...