在InnoDB中执⾏更新操作

磁盘数据如何加载到mysql中,此时我们需要的数据已经从磁盘中加载到缓冲池中了,下⼀步当然就是执⾏更新操作了:
先对需要更新的那⾏数据加锁、原始数据写⼀份到redo log中便于可能的回滚操作、执⾏update操作,此时缓存⻚的数据就被更新了,当然就和磁盘中的数据⻚的数据就不⼀致了,这样的缓存⻚我们称之为脏⻚,如下图所示:


那么,如何才能知道缓冲池中,那些缓存⻚是脏⻚呢?如果能把脏⻚和空闲缓存⻚分离出来,我们就可以把那些脏⻚的数据及时给刷到磁盘中、再释放掉脏⻚内存,在内存不够的情况下不就可以重复利⽤了吗。这⾥InnoDB的设计⽅法类似free链表,设计了⼀个flush链表,也就是那些在缓冲池中被更新过数据的缓存⻚,这些缓存⻚的描述信息都会被添加到flush链表中(这⾥提到的free链表、lru链表、flush链表都是双向循环链表,且节点都为缓存⻚的描述信息,其中flush链表的节点同时也在lru链表中),如下图所示:

 

未经允许不得转载:任鹏个人博客 » 在InnoDB中执⾏更新操作

赞 (0) 打赏

评论 0

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

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

支付宝扫一扫打赏

微信扫一扫打赏