01.MySQL体系结构与存储引擎

         目录

MySQL 的4层体系结构

1)Client Connectors 层

2)MySQLServer层

3)存储引擎层

4)物理层

存储引擎概述(分为实例层和物理层)

新版本特性 

InnoDB 和 MyISAM功能对比

性能对比

InnoDB 存储引擎


MySQL 的4层体系结构

 

存储引擎概述(分为实例层和物理层)

存储引擎是 MySQL 中具体与文件打交道的子系统,它是根据 MySQL AB 公司提供的文件访问层抽象接口定制的一种文件访问机制,这种机制就叫作存储引擎
下面是一些常用的存储引擎,有远古时期的 MyISAM、支持事务的 InnoDB、内存类型的 Memory、归档类型的 Archive、列式存储的 Infobright,以及一些新兴的存储引擎,以 RocksDB 为底层基础的 MyRocks 和 RocksDB,和以分形树索引组织存储的 TokuDB,当然现在还有极数云舟出品的分布式存储引擎 ArkDB,如下图所示。
在 MySQL 5.6 版本之前,默认的存储引擎都是 MyISAM,但 5.6 版本以后默认的存储引擎就是 InnoDB 了。
InnoDB 存储引擎的具体架构如下图所示。上半部分是实例层(计算层),位于内存中,下半部分是物理层,位于文件系统中。
 
实例层
我们先来看实例层。实例层分为线程和内存。InnoDB 重要的线程有 Master Thread,Master Thread 是 InnoDB 的主线程,负责调度其他各线程。
MasterThread的优先级最高,其内部包含几个循环:主循环(loop)、后台循环(backgroundloop)、刷新循环(flushloop)、暂停循环(suspendloop)。Master Thread 会根据其内部运行的相关状态在各循环间进行切换。
大部分操作在主循环(loop)中完成,其包含 1s 和 10s 两种操作。
 
物理层
下面我们来看看物理层,物理层在逻辑上分为系统表空间、用户表空间和 Redo日志。
 
系统表空间里有 ibdata 文件和一些 Undo,ibdata 文件里有 insert buffer 段、double write段、回滚段、索引段、数据字典段和 Undo 信息段。
 
用户表空间是指以 .ibd 为后缀的文件,文件中包含 insert buffer 的 bitmap 页、叶子页(这里存储真正的用户数据)、非叶子页。InnoDB 表是索引组织表,采用 B+ 树组织存储,数据都存储在叶子节点中,分支节点(即非叶子页)存储索引分支查找的数据值。
 
Redo日志中包括多个Redo文件,这些文件循环使用,当达到一定存储阈值时会触发checkpoint刷脏页操作,同时也会在MySQL实例异常宕机后重启,InnoDB表数据自动还原恢复过程中使用。
 
内存和物理结构
上面我们介绍了 MySQL InnoDB 存储引擎的具体架构,下面重点讲解内存和物理结构,如下图所示。
 
 
用户读取或者写入的最新数据都存储在BufferPool中,如果BufferPool中没有找到则会读取物理文件进行查找,之后存储到BufferPool中并返回给 MySQL Server。Buffer Pool 采用LRU 机制。
Buffer Pool 决定了一个 SQL 执行的速度快慢,如果查询结果页都在内存中则返回结果速度很快,否则会产生物理读(磁盘读),返回结果时间变长,性能远不如存储在内存中。
 
Redo log 是一个循环复用的文件集,负责记录 InnoDB 中所有对 Buffer Pool的物理修改日志,当 Redo log文件空间中,检查点位置的 LSN 和最新写入的 LSN 差值(checkpoint_age)达到 Redo log 文件总空间的 75% 后,InnoDB会进行异步刷新操作,直到降至75%以下,并释放Redolog的空间;当checkpoint_age达到文件总量大小的90%后,会触发同步刷新,此时 InnoDB 处于挂起状态无法操作。
 
这样我们就看到 Redo log 的大小直接影响了数据库的处理能力,如果设置太小会导致强行 checkpoint 操作频繁刷新脏页,那我们就需要将 Redo log 设置的大一些
 
若参数 innodb_file_per_table=ON,则表示用户建表时采用用户独立表空间,即一个表对应一组物理文件,.frm 表定义文件和 .ibd 表数据文件。
 
当然若这个参数设置为 OFF,则表示用户建表存储在 ibdata 文件中,不建议采用共享表空间,这样会导致 ibdata 文件过大,而且当表删除后空间无法回收。独立表空间可以在用户删除大量数据后回收物理空间,执行一个 DDL 就可以将表空间的高水位降下来了。
 
 

新版本特性 

MySQL5.7版本新特性如下:
1.将Undo从共享表空间ibdata文件中分离出来,可以在安装MySQL时由用户自行指定文件大小和数量。
2.增加了 temporary 临时表空间,里面存储着临时表或临时查询结果集的数据。
3.Buffer Pool 大小可以动态修改,无需重启数据库实例,这是 DBA 的福音。
 
MySQL 8.0 版本新特性如下:
1.将 InnoDB 表的数据字典和 Undo 都从共享表空间 ibdata 中彻底分离出来了,以前需要ibdata 文件中数据字典与独立表空间 ibd 文件中数据字典一致才行,8.0 版本就不需要了。
2.temporary 临时表空间也可以配置多个物理文件,而且均为 InnoDB 存储引擎并能创建索引,这样加快了处理的速度。
3.用户可以像 Oracle 数据库那样设置一些表空间,每个表空间对应多个物理文件,每个表空间可以给多个表使用,但一个表只能存储在一个表空间中。
 
 

InnoDB 和 MyISAM功能对比

性能对比

1)读写混合模式下,随着CPU核数的增加,InnoDB的读写能力呈线性增长,
2)在测试用例里,最高可达近9000的TPS,但MyISAM因为读写不能并发,它的处理能力跟核数没关系,呈一条水平线,TPS低于500。
3)只读模式下,随着CPU核数的增加,InnoDB的读写能力呈线性增长,最高可达近14000的TPS,但 MyISAM 的处理能力不到 3000 TPS。
以上测试仅为说明 InnoDB 比 MyISAM 的处理能力强大
 
 

InnoDB 存储引擎

核心特性
 InnoDB存储引擎的核心特性包括:MVCC、锁、锁算法和分类、事务、表空间和数据页、内存线程以及状态查询。其中锁和事务会在下一节课时讲解。本课时我们已经学习了InnoDB的表空间和实例等。思维导图如下所示,由于时间有限有些内容不能展开讲,建议你课下多下功夫重点研究。
ARIES 三原则
ARIES 三原则,是指 Write Ahead Logging(WAL)。
1)先写日志后写磁盘,日志成功写入后事务就不会丢失,后续由 checkpoint 机制来保证磁盘物理文件与 Redo 日志达到一致性;
2)利用 Redo 记录变更后的数据,即 Redo 记录事务数据变更后的值;
3)利用 Undo 记录变更前的数据,即 Undo 记录事务数据变更前的值,用于回滚和其他事务多版本读。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值