数据库知识体系mysql内存和日志

初期白癜风能治吗 http://pf.39.net/bdfyy/zqbdf/170908/5683025.html

内存模型

mysql内存模型

BufferPool模型

bufferpool里面有三个链表:

free链表:其作用是管理空闲页,实际上存储的是一个个小控制块,控制块中存放的是对应结点的地址指针

flush链表:其作用是管理脏页,结构和free链表相同,但表达意义不同

lru链表:其作用是进行淘汰页、将最近最久未使用的页替换出来。通常将lru链表分成热数据部分和冷数据部分,比例默认为5:3。

设置为2部分的原因为:若未设置冷热区分,依次全表扫描就会将原理的大多数热点页全部替换掉,但后续替换进去的页实际访问量很少,得不偿失。

冷数据区域数据进入热数据区域的时机:访问同一页的时间间隔1s。为何间隔时间大于而非小于1秒,是因为如果全表扫描的话,数据是一行一行的遍历,相同的一页会很快的被访问,时间间隔远远小于一秒。

日志

日志分布图

redolog(物理日志)

若脏页没有来得及刷新到磁盘中,mysql挂掉了。可使用redolog进行恢复-------读取磁盘中原来的数据+redolog中的操作==在原数据上将以前的操作再做一遍,以达到恢复的效果。

重做时,只需要顺序的读取redolog,是顺序io,速度快。

redolog更新

磁盘中的redologfile默认是2个,当两个都写满了的时候,会触发检查点,将其中某个logfile文件中的操作结合bufferpool中的脏页刷新到磁盘中。例如:0号文件满了,将继续写入当1号文件。若1号文件也满了,后续动作是触发checkpoint,将0号文件中的对应的脏页刷新到磁盘中,后将redolog记录覆盖到0号文件中。

redolog持久化

即:将logBuffer中的缓存写入到磁盘中(redolog)。

更新时机(innoDB_flush_log_at_trx_


转载请注明:http://www.aierlanlan.com/rzfs/4495.html