53.脏页落盘的时机

1.前言

  数据在内存被更新后,由于wal机制,redo和binlog会先落盘,而数据脏页也会在后续喧杂额一定的时间落盘

2.落盘时机

  • redo 写满

    redo log 大小是固定的,写完后会循坏覆盖写入。当有新的内容要写入时,系统必须停止所有的更新操作,将checkpoint向前推进到新的位置,但是在推进之前必须将覆盖部分的所有脏页都flush到磁盘上。此时整个系统不能再更新了,TPS会降为0,所以这种情况要尽量避免。

  • 内存不足需要淘汰数据页

    当系统内存不足,又有新的数据页要更新,就需要淘汰一些数据页,如果淘汰的是脏页,就需要flush到磁盘(如果是干净页就直接释放出来复用)

  • 系统空闲的时候后台会定期flush适量的脏页到磁盘
  • Mysql正常关闭(shut down)时会把所有脏页都flush到磁盘
  • 脏页比例到达设定参数

    innodb_max_dirty_pages_pct默认75%,LRU内的脏块如果超过75%,强制性刷脏。

其中系统后台会有如下操作:

  在loop主循环中又包含两种操作,分别是1s和10s的操作

  • 每1秒:

  (1) 日志缓冲刷新到磁盘,即使这个事务还没有提交

  (2) 刷新脏页到磁盘

  (3) 执行合并插入缓冲的操作

  (4) 产生checkpoint

  (5) 清除无用的table cache

  (6) 如果当前没有用户活动,就可能切换到background loop。

  • 每10秒:

  (1) 日志换冲刷新到磁盘,即使这个事务还没有提交

  (2) 刷新脏页到磁盘

  (3) 执行合并插入缓冲的操作

  (4) 删除无用的undo页

  (5) 产生checkpoint。        

posted on 2022-03-05 15:26  太白金星有点烦  阅读(207)  评论(0)    收藏  举报

导航