缓冲池内存不⾜触发脏⻚刷盘

经过磁盘数据如何加载到mysql中以及在InnoDB中执⾏更新操作流程执⾏了⼀段时间后,直到InnoDB缓冲池中的内存即将不够⽤了,此时如果再来⼀条sql语句的更新操作,要想成功把磁盘中的数据加载到缓存⻚中,就需要先清理下内存中的缓存⻚了。

通过之前提到的lru链表,可以找到lru链表表尾的节点,这些节点之所以在表尾,是因为基本上没什么⼈访问它们,那它们在内存不够⽤的场景下,当然要被优先给清理掉啊;因为flush链表的节点也在lru链表中,此时在缓存⻚清理时需要做⼀个简单的判断:若缓存⻚既在lru表尾的节点同时也在flush链表中,就需要先把脏⻚给刷盘了,然后再释放掉缓存⻚的内存,保证那些事务修改的数据能够落库;若缓存⻚不在flush链表,那更简单直接释放缓存⻚内存,然后将这些释放完内存缓存⻚的描述信息,重现给添加到free链表中,完成⼀次⼤的循环(free链表->lru链表->flush链表->free链表),如下图所示:

未经允许不得转载:任鹏个人博客 » 缓冲池内存不⾜触发脏⻚刷盘

赞 (0) 打赏

评论 0

取消
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏