当需要在Buffer pool分配一个page,但是已经满了,并且所有的page都是dirty的(否则可以释放不dirty的page),通常是不会发生的。这时候必须 flush dirty pages to disk。这种情况将会记录到Innodb_buffer_pool_wait_free中。一般地,可以可以通过启动参数 innodb_max_dirty_pages_pct控制这种情况,当buffer pool中的dirty page到达这个比例的时候,将会强制设定一个checkpoint,并把dirty page flush到disk中。 这种情况下,dirty page的LSN就起作用了。一个是已经Flush到data file中最后一个LSN,还一个是修改了该Page的最后一个LSN。第一,InnoDB检查修改了该Page的最后一个LSN是否比log文件中最近 的log记录的LSN大,只有当log赶上了修改了该Page的最后一个LSN的时 候,才会将数据写到磁盘。换句话说,数据页不会写盘,直到相应的log记录需要写盘的时候。这就是先写日志策略。
转载于:https://blog.51cto.com/slevin/317351