欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL存储引擎InnoDB的体系架构

程序员文章站 2022-06-16 13:13:45
文章目录InnoDB体系架构图后台线程1、Master Thread2、IO Thread3、Purge Thread4、Page Cleaner Thread内存1、缓冲池(缓存)2.LRU List、Free List 和 Flush List3.重做日志缓冲4.额外内存池InnoDB体系架构图后台线程    InnoDB是多线程模型,因此后台有多个不同的后台线程来处理不同的任务。1、Master Thread    Master Thread 听名字就知道是一个非常核心的线程,主要负责将缓...

InnoDB体系架构图

MySQL存储引擎InnoDB的体系架构

后台线程

    InnoDB是多线程模型,因此后台有多个不同的后台线程来处理不同的任务。

1、Master Thread

    Master Thread 听名字就知道是一个非常核心的线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性。

2、IO Thread

    InnoDB中大量使用AIO(Async IO/异步非阻塞IO)来处理IO请求,这样可以极大提高数据库性能。而这些IO Thread的工作就是负责IO请求的回调(call back)处理。
    下面是MySQL的IO Thread。

--------
FILE I/O
--------
I/O thread 0 state: wait Windows aio (insert buffer thread)
I/O thread 1 state: wait Windows aio (log thread)
I/O thread 2 state: wait Windows aio (read thread)
I/O thread 3 state: wait Windows aio (read thread)
I/O thread 4 state: wait Windows aio (read thread)
I/O thread 5 state: wait Windows aio (read thread)
I/O thread 6 state: wait Windows aio (write thread)
I/O thread 7 state: wait Windows aio (write thread)
I/O thread 8 state: wait Windows aio (write thread)
I/O thread 9 state: wait Windows aio (write thread)
Pending normal aio reads: [0, 0, 0, 0] , aio writes: [0, 0, 0, 0] ,
 ibuf aio reads:, log i/o's:, sync i/o's:
Pending flushes (fsync) log: 0; buffer pool: 0
1123 OS file reads, 206 OS file writes, 34 OS fsyncs
0.05 reads/s, 16384 avg bytes/read, 0.00 writes/s, 0.00 fsyncs/s

3、Purge Thread

    事务被提交后,其所使用的undolog可能不会再需要,所有需要Purge Thread来回收已经使用并分配的undo页。

4、Page Cleaner Thread

    脏页刷新线程。

内存

1、缓冲池(缓存)

MySQL存储引擎InnoDB的体系架构

    由于CUP的运算速度和磁盘相差太大,所有MySQL就在内存中制作了缓存(MySQL8已经把缓存移除了)。在数据库读取操作时,首先会把磁盘上的数据读取到缓存,这也操作称之为把页“FIX”到缓冲池中。如果又有线程读取该数据就直接从缓存中获取。修改数据时先会修改缓冲池中的页,然后再以一定的频率刷新到磁盘上(通过Checkpoint机制刷新)。

2.LRU List、Free List 和 Flush List

    InnoDB如何管理缓冲池?通常来说是通过LRU(Latest Recent Used)算法进行管理。

3.重做日志缓冲

    重做日志是为了实现事务的持久性所存在的。InnoDB首先将重做日志信息先放入这个缓冲区,然后按一定频率刷新到重做日志文件中。

4.额外内存池

    在InnoDB存储引擎中,对内存的管理是通过一种称为内存堆的方式进行的。在对一些数据结构本身的内存进行分配时,需要从额外的内存池中进行申请,当该区域的内存不够时,会从缓冲池进行申请。

本文地址:https://blog.csdn.net/qq_44518192/article/details/109646717

相关标签: MySQL