Mysql专栏-Buffer Pool缓存机制的一整套运行原理

Posted TGB-Earnest

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql专栏-Buffer Pool缓存机制的一整套运行原理相关的知识,希望对你有一定的参考价值。

执行数据流程


1.从磁盘加载数据到buffer pool,会先去判断要更新的数据所在数据页是否已经被加载到了,如果已经被加载到了buffer pool中的数据页就直接使用。

2.写入数据的旧值到undo log日志中,用于事务回滚。

3.更新buffer pool数据页中内存数据。

4.写入内存中的redo log,这个时候还没写入磁盘中,记录对那个表那条记录做了什么操作。

5.提交事务,将内存的redo log写入磁盘中的redo log日志,用于崩溃恢复。

6.提交事务之前,还要在内存中写binlog日志,提交事务时写入磁盘文件。

7.将commit标记写入redo log,数据最后通过线程写入磁盘整个流程完成。

注意:最后一步是为了让redo log与binlog保持一致。5、6、7三步都执行完成才算提交事务完毕。

几个链表的使用

接着我们来讲讲,你的Buffer Pool在运行中被使用的时候,实际上会频繁的从磁盘上加载数据页到他的缓存页里去,
然后free链表、flush链表、lru链表都会在使用的时候同时被使用
比如数据加载到一个缓存页,free链表里会移除这个缓存页,然后lru链表的冷数据区域的头部会放入这个缓存页。
然后如果你要是修改了一个缓存页,那么flush链表中会记录这个脏页,lru链表中还可能会把你从冷数据区域移动到热
数据区域的头部去。
如果你是查询了一个缓存页,那么此时就会把这个缓存页在lru链表中移动到热数据区域去,或者在热数据区域中也有
可能会移动到头部去。
总之,mysql在执行CRUD的时候,首先就是大量的操作缓存页以及对应的几个链表。然后在缓存页都满的时候,必
然要想办法把一些缓存页给刷入磁盘,然后清空这几个缓存页,接着把需要的数据页加载到缓存页里去!

以上是关于Mysql专栏-Buffer Pool缓存机制的一整套运行原理的主要内容,如果未能解决你的问题,请参考以下文章

Mysql专栏-Buffer Pool缓存机制的一整套运行原理

MySql 缓冲池(buffer pool) 和 写缓存(change buffer) 转

MySql 缓冲池(buffer pool) 转

MySQL缓冲池buffer pool

MySQL缓冲池buffer pool

MySQL缓冲池buffer pool