checkpoint的作用
缩短数据库的恢复时间 缓冲池不够用时,将脏页刷新到磁盘 redolog不可用时,刷新脏页
关于redo log的生成情况分析
关于redo log生成情况可以通过show engine innodb status\G命令查看。
---LOG---Log sequence number 25778620828Log flushed up to 25778620828Pages flushed up to 25778620828Last checkpoint at 257786208190 pending log flushes, 0 pending chkp writes16 log i/o's done, 0.00 log i/o's/second
1. Log sequence number,表示数据库开启到现在已经产生的日志量,即LSN,日志序列号,单位是字节,值越大,说明数据库更新越多。通过它可以计算日志的产生速度。
2. Log flushed up to,表示日志已经刷新到哪个点了,它的值>=LSN。
LSN - Log flushed up to表示log buffer中还有多少日志未刷新到磁盘。如果系统hang住了,可以通过LSN - Log flushed up to来看下是否是由于log buffer满了导致系统hang住了。一般情况下,如果超过30%的日志还没有刷新到日志文件中,就需要增大innodb_log_buffer_size的值。
3. Pages flushed up to,表示脏页已经刷到哪个点了,表示这之前的logfile里的日志可以被覆盖了。
2-3表示不可覆盖的脏页的量,如果它的值较小,说明Log flushed up to和Pages flushed up to的值比较接近,表示脏页刷的比较快,可以被覆盖的logfile就多。如果2-3的值大,表示脏页刷新的速度慢,能被覆盖的logfile就少。
4. Last checkpoint at,表示最后一次检查点的log位置。它的值表示系统启动时从哪个点去恢复,redo log做崩溃恢复时指定的起点。去做崩溃恢复时,终点是最新的一条logfile,起点就是checkpoint,记录的最早脏的点。
3-4表示checkpoint这个动作的跟进速度。值大表示需要提高checkpoint的跟进速度。
2-4表示崩溃后日志要恢复的量。
checkpoint的工作机制
master thread checkpoint:以每秒或者每十秒的速度从缓冲池的脏页列表中刷新一定比例的脏页回磁盘,这个过程是异步的,不会阻塞用户线程。 flush_lru_list checkpoint:通过参数 innodb_lru_scan_depth 控制LRU列表中可用页的数量,发生了这个checkpoint时,说明脏页写入速度过慢。 async/sync flush checkpoint:指的是重做日志不可用的情况。当重做日志不可用时, 如果不能被覆盖的脏页数量(2-3)达到 75%时,触发异步checkpoint。 不能被覆盖的脏页数量(2-3)达到90%时,同步并且阻塞用户线程,然后根据 flush 列表最早脏的顺序刷脏页。 当这个事件中的任何一个发生的时候,都会记录到errlog 中,一旦errlog出现这种日志提示,一定需要加大logfile的组数。 dirty page too much checkpoint:脏页太多时,也会发生强制写日志,会阻塞用户线程,由innodb_max_dirty_pages_pct参数(默认75%)控制。
小结




