Open EasonYou opened 4 years ago
以下从缓冲池和日志的角度,描述事务的提交
InnoDB存储引擎有多个内存块,组成一个大的内存池,负责如下工作
其中,后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存是最近的数据。此外将已修改的数据文件刷新到磁盘,同事保证数据库发生异常的情况下InnoDB能回复到正常运行状态
Master Thread 非常核心的后台线程,负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性
IO Thread InnoDB存储引擎大量使用了AIO(Async IO异步IO)来处理IO请求,以提高性能。而IO Thread主要负责这些IO请求的回调处理
Purge Thread 回收已提交事务后,不需要的undolog
LRU
Free list
Flush list
checkpoint本身是缓冲池 解决了以下问题
具体来说
redo log是发生在存储引擎这一层,是innodb的日志文件系统,而bin log是在mysql的server层,所有的日志都有
两个日志必须是状态一致的,所以他们的日志写入,则是一个事务的提交过程
bin log记录的是完整的逻辑记录,redo log记录的是物理日志
事务提交的过程,称为两阶段提交
为什么要进行这样的一个提交流程呢?
二阶段的提交保证了两者日志的一致性
本文大致描述了事务、缓冲池、checkpoint、日志之间的关联,但还有许多细节需要深究。例如redo log以及undo log的关系、checkpoint的运行机制等等。
整体架构
事务的基本概念
以下从缓冲池和日志的角度,描述事务的提交
InooDB体系架构
InnoDB存储引擎有多个内存块,组成一个大的内存池,负责如下工作
其中,后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存是最近的数据。此外将已修改的数据文件刷新到磁盘,同事保证数据库发生异常的情况下InnoDB能回复到正常运行状态
后台线程
Master Thread 非常核心的后台线程,负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性
IO Thread InnoDB存储引擎大量使用了AIO(Async IO异步IO)来处理IO请求,以提高性能。而IO Thread主要负责这些IO请求的回调处理
Purge Thread 回收已提交事务后,不需要的undolog
内存
缓冲池
LRU List、FreeList和Flush List
LRU
Free list
Flush list
redo log
redo log buffer
redo log file
checkpoint技术
checkpoint本身是缓冲池 解决了以下问题
具体来说
redo log与bin log
redo log是发生在存储引擎这一层,是innodb的日志文件系统,而bin log是在mysql的server层,所有的日志都有
两个日志必须是状态一致的,所以他们的日志写入,则是一个事务的提交过程
bin log记录的是完整的逻辑记录,redo log记录的是物理日志
事务提交的过程,称为两阶段提交
为什么要进行这样的一个提交流程呢?
二阶段的提交保证了两者日志的一致性
总结
本文大致描述了事务、缓冲池、checkpoint、日志之间的关联,但还有许多细节需要深究。例如redo log以及undo log的关系、checkpoint的运行机制等等。
参考文档