MySQL存储引擎InnoDB的体系架构
文章目录
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、缓冲池(缓存)
由于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
上一篇: 小白学习视觉SLAM十四讲显示相机的位姿