Mysql InnoDB体系架构

InnoDB存储引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作:

  • 维护所有进程/线程需要访问的多个内部数据 结构
  • 缓存磁盘上的数据,方便快速地读取,同时在对磁盘文件的数据修改之前在这里缓存
  • 重做日志(redo log)缓冲。

后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据。此外将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常的情况下InnnoDB能恢复到正常运行状态。

1 后台线程

InnoDB 存储引擎是多线程的模型,因此其后台有多个不同的后台线程,负责处理不同的任务。

1.1 Master Thread

Master Thread是一个 非常核心的后台线程,主要负责将缓冲池中的数据异步刷新到次哦按,保证数据的一致性,包括脏 页的刷新、合并插入缓冲、UNDO页的回收等。

1.2 IO Thread

在InnoDB存储 引擎中大量使用了AIO(Async IO)来处理写IO请求,这样可以极大提高数据库的性能,而IO Thread 的工作主要是负责这些IO请求的回调(call back)处理。从InnoDB 1.0.x 版本开始,read thread 和 write thread分别增大到4个,分别使用innodb_read_io_threads 和 innodb_write_io_therads 参数进行设置:

2. 内存

2.1 缓冲池

InnoDB 存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可将其视为基于磁盘的数据库系统。在数据库系统中,由于CPU速度与磁盘速度之间的差异,基于磁盘的数据库系统通常使用缓冲池技术来提高数据库的整体性能。

缓冲池简单来说就是一块内存区域,通过内存的速度来弥补磁盘速度 较慢对数据库性能的影响。在数据库中进行读取页的操作,首先将从磁盘读到的页存放在缓冲池中,这个过程称为将页"FIX"在缓冲池中。下一次再读相同的页时,首先判断该页是否在缓冲池中。若在缓冲池中,称该页在缓冲池中被命中,直接读取该页。否则,读取磁盘上的页。

对于数据库中页的修改操作,则首先修改在缓冲池的页,然后再以一定的频率刷新到磁盘上。这里需要注意的是,也从缓冲池刷新回此案的操作并不是在每次页发生更新时触发,而是通过一种称为Checkpoint的机制刷新回磁盘。同样,这 也是为了提高数据库性能。

对于InnoDB存储引擎而言,其缓冲池的配置通过innodb_buffer_pool_size来设置。


猜你喜欢

转载自blog.csdn.net/fd2025/article/details/80297065