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

目录

前言

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的体系结构

Mysql InnooDb存储引擎的体系结构和逻辑存储结构_第1张图片

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行记录。

你可能感兴趣的:(mysql,数据库,mysql,java)