1.buffer pool mysql最大的缓冲区,page都放在里面默认大小128M,相当于缓存 2.page进来后先存入free链表 3.free链表记录buffer pool 哪些位置是空的指针 4.buffer pool 放不下的时候会将最近最少的控制块删了用的是lru 5.Lru链表最前面的节点就是最常用的节点 6.换血的意思用不常用的数据替换了buffer pool 里面的热数据 7.lru链表又分为热数据和冷数据,如下图前面5个是热的后面3个是冷
9.当冷数据在大于1秒的时间又再次被访问,就会升级为热数据 10.管理脏页的链表也就是被update的页,mysql会定时对脏页扫描然后持久化磁盘
-
update执行流程 1.修改buffer pool页里面的数据 2.生成一个binLog对象 3.生成一个redolog对象 4.生成一个undoLog对象(记录回滚sql) 5.事务提交持久化redoLog 6.后台定时任务持久化脏页 11.mysql启动后会自动为redoLog占据两个空间 update的数据会暂时存在redoLog中,空间满了后才持久化 12.redolog变大,mysql宕机了,那么恢复就慢,但是mysql运行变快 13.RedoLog其实记录的是页的位置
15.双写缓冲区的作用在于,一般的新数据是在内存中的,它是通过操作系统持久化到硬盘,如果操作系统挂了 内存中的新数据也没了,那么此时 磁盘中的老数据是无法根据redoLog进行数据恢复的,但是如果新数据已经被先写到双写缓冲区了,那么就算操作系统挂了,此时因为双写缓冲区已经写入新数据并且,双写缓冲区隶属于磁盘,所以就算是双写缓冲区在写入到磁盘的过程中出问题了,他也可以根据redoLog恢复数据。 16.
|