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
当sync_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