InnoDB存储引擎有多个内存块儿,这些内存块儿组成了一个大的内存池。作用如下:
1、维护所有进程/线程需要访问的多个内部数据结构
2、缓存磁盘上的数据,方便快速的读取,同时在对磁盘文件的数据结构修改之前在内存块里做一下缓存。
3、重做日志redo log缓冲
后台线程的作用是:
1、负责刷新内存池中的数据,保证缓冲池内的内存缓存的是最近的数据。
2、将已经修改的数据文件刷新到磁盘文件(保证异常的时候innodb能恢复到正常运行状态)
InnoDB存储引擎是多线程的模型,有多个不同的后台线程,处理不同的任务。
1、Master Thread
这是一个核心后台线程,主要负责将缓冲池里的数据异步刷新到磁盘中,保证数据的一致性,包括:脏页的刷新、合并插入缓冲、undo页的回收。
2、IO Thread
3、Purge Thread
4、Page Cleaner Thread
1、缓冲池
缓冲池是存在于内存中的,而innodb是基于磁盘的,所以查询的时候通常使用缓冲池来提高数据库的性能。内存的速度 > 磁盘的速度的。在进行页的读取的时候,首先将磁盘读到的页存放在缓冲池中,下一次再读相同的页的时候,判断一下缓冲池里有没有,如果有直接取,如果没有那就去磁盘读,和redis一样。
而对于数据库中页的修改,首先要修改缓冲池中的页,然后再以一定的频率刷新(不是每次页发生更改时触发)到磁盘上(CheckPoint机制)
数据库缓冲池是一个很大的内存区域,存放了各种类型的页,InnoDB存储引擎使用LRU算法对这块区域进行管理。注意是使用的升级后的LRU算法,不是朴素的LRU算法
2、重做日志缓冲
InnoDB存储引擎的内存区域除了缓冲池外,还有重做日志缓冲(redo log buffer)InnoDB存储引擎首先将重做日志信息先放入到这个缓冲区,然后按照一定的频率(一般来说是每一秒)将其刷新到重做日志文件。
在通常情况下,8MB的重做日志缓冲池足以满足绝大部分应用,因为重做日志在三种情况下会将重做日志缓冲中的内容刷新到外部磁盘的重做日志文件中。
1、Master Thread每一秒将重做日志缓冲刷新到重做日志文件
2、每个事物提交时会将重做日志缓冲刷新到重做日志文件
3、当重做日志缓冲池剩余空间小于1/2时,重做日志缓冲刷新到重做日志文件
3、额外的内存池
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!