mysql体系结构、Innodb体系架构

Mysql体系结构

我们一般可以将mysql结构分为四层.
第一层是客户端连接器,主要包括了数据库连接、认证、安全管理等.该层引入了线程池,对接入的连接进行了管理,提高效率.

第二层是server层,主要实现sql的一些基础功能,比如解析、优化、执行还有对数据的排序等等.

第三层是引擎层,有各种存储引擎,比如说Innodb、MyISAM等.

第四层是存储层,主要负责将数据存储到文件系统中,并完成和引擎层的交互.

在这里插入图片描述

Innodb体系架构

InnoDB 主要包括了内存池、后台线程以及存储文件

  1. 内存池:
    是由多个内存块组成的,主要包括缓存磁盘数据、redo log 缓冲等;
  2. 后台线程:
    包括了 Master Thread、IO Thread 以及 Purge Thread 等;
  3. 存储文件:
    由 InnoDB 存储引擎实现的表的存储结构文件一般包括表结构文件(.frm)、共享表空间文件(ibdata1)、独占表空间文件(ibd)以及日志文件(redo 文件等)等。
    在这里插入图片描述

内存池

试想这样一个问题, 如果我们每次读写数据直接操作磁盘的话,那性能是非常慢的,所以在Innodb存储引擎中也有一个缓存,就是缓冲池.

缓冲池不仅存储索引页和数据页,也包括undo页,插入缓存、自适应哈希索引以及锁信息等.

在客户端读取数据时,如果数据存在于缓冲池中,就直接将缓冲池中的数据返回出去、如果修改数据,也会先修改缓冲池中的数据,然后再将数据刷新到磁盘上.

扫描二维码关注公众号,回复: 14688007 查看本文章

后台线程

Master Thread 主要负责将缓冲池中的数据异步刷新到磁盘中,除此之外还包括插入缓存、undo 页的回收等,

IO Thread 是负责读写 IO 的线程,

而 Purge Thread 主要用于回收事务已经提交了的 undo log,

Pager Cleaner Thread 是新引入的一个用于协助 Master Thread 刷新脏页到磁盘的线程,它可以减轻 Master Thread 的工作压力,减少阻塞。

存储文件

存储文件在 MySQL 中建立一张表都会生成一个.frm 文件,该文件是用来保存每个表的元数据信息的,主要包含表结构定义。

在 InnoDB 中,存储数据都是按表空间进行存放的,默认为共享表空间,存储的文件即为共享表空间文件(ibdata1)。若设置了参数 innodb_file_per_table 为 1,则会将存储的数据、索引等信息单独存储在一个独占表空间,因此也会产生一个独占表空间文件(ibd)。

日志文件则主要是重做日志文件,主要记录事务产生的重做日志,保证事务的一致性.

这里只是从整体上介绍了架构体系,如果对redo.log、undo.log、事务执行流程等感兴趣,可以阅读以下文章,可以帮助你将这些知识点串起来.

浅析MySQL事务中的redo与undo
透彻解读MVCC

今天的分享就到这里了,有问题可以在评论区留言,均会及时回复呀.
我是bling,未来不会太差,只要我们不要太懒就行, 咱们下期见.
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wangliangluang/article/details/129896769