总体
什么是检查点?
检查点 = lsn的位置
检查点就是描述的是当天的lsn之前的数据全部写入了数据文件,比如lsn=1000000,则下次恢复数据只要从这个lsn的点是扫描redo log,进行前滚和回滚
主要的目的是 减少实例恢复的时间。
我们进行show engine innodb status\G 看到关于lsn的信息
LOG
Log sequence number 1045356087105 --内存中即redo log buffer中的记录的最大lsn
Log flushed up to 1045356086977 --redo log已经落盘的最大lsn
Pages flushed up to 1045356077534 --已经写入磁盘的lsn
Last checkpoint at 1045355916165 --当前检查点 lsn
也就是说如果mysql crash则从Last checkpoint at进行恢复。减少数据库恢复的时间
什么时候做检查点?
flushes small batches of dirty pages from the buffer pool
flushing all dirty pages at once
有些文章上把redo 切换放到sharp checkpoint,其实是不合适;这么看来只有正常shutdown 才算是做sharp checkpoint
特别需要关注的就是sync checkpoint 同步的刷脏。
checkpoint_age = redo_lsn-checkpoint_lsn,也即checkpoint_age等于最新的lsn减去已经刷新到磁盘的lsn的值
async_water_mark = 75%*innodb_log_file_size
sync_water_mark = 90%*innodb_log_file_size
尽管避讳阻塞读,需要尽量避免这种情况发生。一般建议redo log设置的大一些