innodb redolog 刷盘策略:

1.master thread 每秒刷新一次
2.事务提交时刷新redo到磁盘
3.innodb_log_buffer剩余空间小于1/2时,刷新redo到磁盘。

innodb checkpoint 刷脏数据策略:

innodb checkpoint分为sharp checkpoint,fuzzy checkpoint,类似于oracle的完全检查点和增量检查点。

sharp checkpoint发生在数据库关闭时将所有脏页都刷新到磁盘。
fuzzy checkpoint又分为:
master thread checkpoint
flush_lru_list checkpoint
async/sync flush checkpoint
dirty page too much checkpoint

master thread checkpoint:
master thread发生checkpoint,每秒或每十秒从缓冲池脏页列表刷新一定比例的页回磁盘,这是一个异步的过程。

flush_lru_list checkpoint:
innodb存储引擎需要保证lru列表中有差不多N个空闲页可用。如果没有N个空闲页,会触发checkpoint将lru列表尾端的脏页移除。
N为innodb_lru_scan_depth的参数值。

async/sync flush checkpoint:
在重做日志文件不可用的情况下,需要强制将脏页列表中的一些脏页刷回磁盘。具体的刷页规则如下:
(lsn:占8字节累增的值,表示已经写入的日志文件总字节数,记录数据库的变化。类似于oracle中scn号)
checkpoint_age = redo_lsn - checkpoint_lsn
async_water_mark = 75% * total_redo_log_size(多个重做日志文件总大小)
sync_water_mark = 90% total_redo_log_size
若单个重做日志文件为1G,一共定义了两个重做日志文件,则total_redo_log_size=2G,
async_water_mark=1.5G,sync_water_mark=1.8G
当checkpoint_age<async_water_mark 不会触发checkpoint刷盘
当async_water_mark<checkpoint_age<sync_water_mark,会从脏页列表异步刷新足够的脏页回磁盘,直到checkpoint_age<async_water_mark
当sync_water_mark<checkpoint_age,出现该情况可能是重做日志文件设置过小,会从脏页列表同步刷新足够的脏页回磁盘,直到checkpoint_age<async_water_mark
以上的刷新操作均由page cleaner thread完成

dirty page too much checkpoint:
当脏页列表中的脏页超过innodb_max_dirty_page参数值时,会导致innodb强制checkpoint刷新一部分脏页。该参数值默认为75

oracle redolog 刷盘策略:

oracle 刷新redolog是通过后台进程LGWR完成的
LGWR的触发条件:
①commit 
②重做日志缓存区中有1/3的重做日志未被写入磁盘
③重做日志缓冲区中有大于1M的重做日志未被写入磁盘
④每隔3秒

oracle checkpoint 刷脏页策略:

oracle checkpoint 触发DBWR进程刷新脏数据
oracle checkpoint分为完全检查点和增量检查点,其中1,2,3,6触发增量检查点,4,5,7触发完全检查点
1.当发生日志切换的时候
2.当符合LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_INTERVAL,fast_start_mttr_target参数设置的时候
3.当运行ALTER SYSTEM SWITCH LOGFILE的时候
4.当运行ALTER SYSTEM CHECKPOINT的时候
5.当运行alter tablespace XXX offline|online|begin backup|end backup|read only|read write的时候
6.buffer pool中脏页达到一定比例
7.shutdown immediate