Mysql InnooDb存储引擎的体系结构和逻辑存储结构

本文介绍了MySQL的体系结构及InnoDB存储引擎的特性与逻辑存储结构,包括表空间、段、区、页和行的概念及其作用。

目录

 

前言

1. mysql的体系结构

1.1 连接池组件

1.2 管理服务和工具组件

1.3 sql接口组件

1.4 查询分析器组件

1.5 优化器组件

1.6 缓冲组件

1.7 插件式存储引擎

1.8 物理文件

2.InnoDB的特性

3.InnoDB的逻辑存储结构

3.1 表空间

3.2 段

3.3 区

3.4 页

3.5 行


前言

        这是一篇理论性比较强的文章,是不是很多人一听理论性的东西,就被劝退了?可千万别。其实分享内容非常简单,也非常干,相信你会喜欢的,对你也是有帮助的。切入正题,mysql的体系结构可以作为一般知识了解即可,让我们对mysql的工作流程有一个宏观的认识,毕竟对于大部分人来说,不需要我们去设计数据库,而是仅作使用。作为普通使用mysql的开发人员,mysql的逻辑存储结构才是关键重点。因为平时我们对使用mysql主要在于数据的存储与提取,如果能够了解,数据是库里按什么结构组织起来的,这对于如何高效使用mysql存取数据是非常有帮助的。

1. mysql的体系结构

1.1 连接池组件

        连接池组件主要的作用就是用户连接的维护及管理,提升访问性能,另外就是角色权限认证,大多数基于网络的客户端 / 服务端的程序都有类似的结构,核心理念就是为了连接复用。

1.2 管理服务和工具组件

        管理服务和工具组件主要是指系统管理和控制工具,例如备份恢复、Mysql 复制、集群等。

1.3 sql接口组件

        sql组件用于接收用户的sql命令,并且返回sql执行后的结果。

1.4 查询分析器组件

        对sql进行解析,语法验证,解析称为内部的数据结构(解析树)

1.5 优化器组件

        优化器组件主要是对用户书写的sql进行优化,如索引的选择,表的读取顺序等。

1.6 缓冲组件

        对结果进行缓存,包含表缓存,记录缓存,权限缓存,key缓存等。

1.7 插件式存储引擎

        开发者可以选择合适的存储引擎,也可以定制化开发存储引擎,存储引擎是基于表的,不是数据库

1.8 物理文件

        mysql中的数据最终会持久化到文件中。

2.InnoDB的特性

        支持ACIDG事务的存储引擎

        行锁设计

        支持MVCC

        支持外键、提供一致性的非锁定读

3.InnoDB的逻辑存储结构

3.1 表空间

        从InnoDB存储引擎的逻辑结构看,所有数据都被逻辑地存放在一个空间内,称为表空间(tablespace),而表空间由段(sengment)、区(extent)、页(page)组成。表空间(Tablespace)是一个逻辑容器,表空间存储的对象是段,在一个表空间中可以有一个或多个段,但是一个段只能属于一个表空间。数据库由一个或多个表空间组成,表空间从管理上可以划分为系统表空间、用户表空间、撤销表空间、临时表空间等。在 InnoDB 中存在两种表空间的类型:共享表空间和独立表空间。如果是共享表空间就意味着多张表共用一个表空间。如果是独立表空间,就意味着每张表有一个独立的表空间,也就是数据和索引信息都会保存在自己的表空间中。独立的表空间可以在不同的数据库之间进行迁移。可通过命令查看当前系统启用的表空间类型。

mysql > show variables like 'innodb_file_per_table';

        InnoDB把数据保存在表空间内,表空间可以看作是InnoDB存储引擎逻辑结构的最高层。本质上是一个由一个或多个磁盘文件组成的虚拟文件系统。InnoDB用表空间并不只是存储表和索引,还保存了回滚段、双写缓冲区等。

3.2 段

        段(Segment)由一个或多个区组成,区在文件系统是一个连续分配的空间(在 InnoDB 中是连续的 64 个页),不过在段中不要求区与区之间是相邻的。段是数据库中的分配单位,不同类型的数据库对象以不同的段形式存在。当我们创建数据表、索引的时候,就会相应创建对应的段,比如创建一张表时会创建一个表段,创建一个索引时会创建一个索引段。

3.3 区

        在 InnoDB 存储引擎中,一个区会分配 64 个连续的页。因为 InnoDB 中的页大小默认是 16KB,所以一个区的大小是 64*16KB=1MB。在任何情况下每个区大小都为1MB,为了保证页的连续性,InnoDB存储引擎每次从磁盘一次申请4-5个区。默认情况下,InnoDB存储引擎的页大小为16KB,即一个区中有64个连续的页。

3.4 页

        页是InnoDB存储引擎磁盘管理的最小单位,每个页默认16KB;InnoDB存储引擎从1.2.x版本碍事,可以通过参数innodb_page_size将页的大小设置为4K、8K、16K。若设置完成,则所有表中页的大小都为innodb_page_size,不可以再次对其进行修改,除非通过mysqldump导入和导出操作来产生新的库。

        innoDB存储引擎中,常见的页类型有:

  1. 数据页(B-tree Node)
  2. undo页(undo Log Page)
  3. 系统页 (System Page)
  4. 事物数据页 (Transaction System Page)
  5. 插入缓冲位图页(Insert Buffer Bitmap)
  6. 插入缓冲空闲列表页(Insert Buffer Free List)
  7. 未压缩的二进制大对象页(Uncompressed BLOB Page)
  8. 压缩的二进制大对象页 (compressed BLOB Page)

3.5 行

        InnoDB存储引擎是按行进行存放的,每个页存放的行记录也是有硬性定义的,最多允许存放16KB/2-200,即7992行记录。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凡夫贩夫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值