营业执照咋做网等网站,详情页设计要求,网络直接销售的营销方式,免费的网站推广平台一、简介 
思考一下这个场景#xff1a;如果重做日志可以无限地增大#xff0c;同时缓冲池也足够大#xff0c;那么是不需要将缓冲池中页的新版本刷新回磁盘。因为当发生宕机时#xff0c;完全可以通过重做日志来恢复整个数据库系统中的数据到宕机发生的时刻。 
但是这需要…一、简介 
思考一下这个场景如果重做日志可以无限地增大同时缓冲池也足够大那么是不需要将缓冲池中页的新版本刷新回磁盘。因为当发生宕机时完全可以通过重做日志来恢复整个数据库系统中的数据到宕机发生的时刻。 
但是这需要两个前提条件 
1、缓冲池可以缓存数据库中所有的数据2、重做日志可以无限增大 
因此Checkpoint检查点技术就诞生了目的是解决以下几个问题 
1、缩短数据库的恢复时间2、缓冲池不够用时将脏页刷新到磁盘3、重做日志不可用时刷新脏页。 
当数据库发生宕机时数据库不需要重做所有的日志因为Checkpoint之前的页都已经刷新回磁盘。数据库只需对Checkpoint后的重做日志进行恢复这样就大大缩短了恢复的时间。 
当缓冲池不够用时根据LRU算法会溢出最近最少使用的页若此页为脏页那么需要强制执行Checkpoint将脏页也就是页的新版本刷回磁盘。 
当重做日志出现不可用时因为当前事务数据库系统对重做日志的设计都是循环使用的并不是让其无限增大的重做日志可以被重用的部分是指这些重做日志已经不再需要当数据库发生宕机时数据库恢复操作不需要这部分的重做日志因此这部分就可以被覆盖重用。如果重做日志还需要使用那么必须强制Checkpoint将缓冲池中的页至少刷新到当前重做日志的位置。 
对于InnoDB存储引擎而言是通过LSNLog Sequence Number来标记版本的。 
LSN是8字节的数字每个页有LSN重做日志中也有LSNCheckpoint也有LSN。可以通过命令SHOW ENGINE INNODB STATUS来观察 
mysql show engine innodb status \G---
LOG
---
Log sequence number 34778380870
Log flushed up to   34778380870
Last checkpoint at  34778380870
0 pending log writes, 0 pending chkp writes
54020151 log i/os done, 0.92 log i/os/secondCheckpoint发生的时间、条件及脏页的选择等都非常复杂。而Checkpoint所做的事情无外乎是将缓冲池中的脏页刷回到磁盘不同之处在于每次刷新多少页到磁盘每次从哪里取脏页以及什么时间触发Checkpoint。 
二、Checkpoint分类 
在InnoDB存储引擎内部有两种Checkpoint分别为Sharp Checkpoint、Fuzzy Checkpoint 
Sharp Checkpoint 发生在数据库关闭时将所有的脏页都刷新回磁盘这是默认的工作方式即参数innodb_fast_shutdown1。但是若数据库在运行时也使用Sharp Checkpoint那么数据库的可用性就会受到很大的影响。故在InnoDB存储引擎内部使用Fuzzy Checkpoint进行页的刷新即只刷新一部分脏页而不是刷新所有的脏页回磁盘。 
Fuzzy Checkpoint 
1、Master Thread Checkpoint2、FLUSH_LRU_LIST Checkpoint3、Async/Sync Flush Checkpoint4、Dirty Page too much Checkpoint 
1、Master Thread Checkpoint 
以每秒或每十秒的速度从缓冲池的脏页列表中刷新一定比例的页回磁盘这个过程是异步的此时InnoDB存储引擎可以进行其他的操作用户查询线程不会阻塞。 
2、FLUSH_LRU_LIST Checkpoint 
因为InnoDB存储引擎需要保证LRU列表中需要有差不多100个空闲页可供使用。在InnoDB1.1.x版本之前需要检查LRU列表中是否有足够的可用空间操作发生在用户查询线程中显然这会阻塞用户的查询操作。倘若没有100个可用空闲页那么InnoDB存储引擎会将LRU列表尾端的页移除。如果这些页中有脏页那么需要进行Checkpoint而这些页是来自LRU列表的因此称为FLUSH_LRU_LIST Checkpoint。 
而从MySQL 5.6版本也就是InnoDB1.2.x版本开始这个检查被放在了一个单独的Page Cleaner线程中进行并且用户可以通过参数innodb_lru_scan_depth控制LRU列表中可用页的数量该值默认为1024如 
mysql  SHOW GLOBAL VARIABLES LIKE innodb_lru_scan_depth;
------------------------------
| Variable_name         | Value |
------------------------------
| innodb_lru_scan_depth | 1024  |
------------------------------3、Async/Sync Flush Checkpoint 
指的是重做日志文件不可用的情况这时需要强制将一些页刷新回磁盘而此时脏页是从脏页列表中选取的。若将已经写入到重做日志的LSN记为redo_lsn将已经刷新回磁盘最新页的LSN记为checkpoint_lsn则可定义 
checkpoint_age  redo_lsn - checkpoint_lsn再定义以下的变量 async_water_mark  75% * total_redo_log_file_sizesync_water_mark  90% * total_redo_log_file_size若每个重做日志文件的大小为1GB并且定义了两个重做日志文件则重做日志文件的总大小为2GB。那么async_water_mark1.5GBsync_water_mark1.8GB。则 
当checkpoint_ageasync_water_mark时不需要刷新任何脏页到磁盘 
当async_water_markcheckpoint_agesync_water_mark时触发Async Flush从Flush列表中刷新足够的脏页回磁盘使得刷新后满足checkpoint_ageasync_water_mark 
checkpoint_agesync_water_mark这种情况一般很少发生除非设置的重做日志文件太小并且在进行类似LOAD DATA的BULK INSERT操作。此时触发Sync Flush操作从Flush列表中刷新足够的脏页回磁盘使得刷新后满足checkpoint_ageasync_water_mark。 
可见Async/Sync Flush Checkpoint是为了保证重做日志的循环使用的可用性。在InnoDB 1.2.x版本之前Async Flush Checkpoint会阻塞发现问题的用户查询线程而Sync Flush Checkpoint会阻塞所有的用户查询线程并且等待脏页刷新完成。从InnoDB 1.2.x版本开始——也就是MySQL 5.6版本这部分的刷新操作同样放入到了单独的Page Cleaner Thread中故不会阻塞用户查询线程。 
MySQL官方版本并不能查看刷新页是从Flush列表中还是从LRU列表中进行Checkpoint的也不知道因为重做日志而产生的Async/Sync Flush的次数。但是InnoSQL版本提供了方法可以通过命令SHOW ENGINE INNODB STATUS来观察如 
mysql show engine innodb status \GBUFFER POOL AND MEMORY
----------------------
Total memory allocated 2058485760; in additional pool allocated 0
Dictionary memory allocated 913470
Buffer pool size   122879
Free buffers       79668
Database pages     41957
Old database pages 15468
Modified db pages  0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 15032929, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 15075936, created 366872, written 36656423
0.00 reads/s, 0.00 creates/s, 0.90 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 41957, unzip_LRU len: 0
I/O sum[39]:cur[0], unzip sum[0]:cur[0]4、Dirty Page too much 
即脏页的数量太多导致InnoDB存储引擎强制进行Checkpoint。其目的总的来说还是为了保证缓冲池中有足够可用的页。其可由参数innodb_max_dirty_pages_pct控制 
mysql SHOW GLOBAL VARIABLES LIKE innodb_max_dirty_pages_pct ;
-----------------------------------
| Variable_name              | Value |
-----------------------------------
| innodb_max_dirty_pages_pct | 75    |
-----------------------------------innodb_max_dirty_pages_pct值为75表示当缓冲池中脏页的数量占据75%时强制进行Checkpoint刷新一部分的脏页到磁盘。在InnoDB 1.0.x版本之前该参数默认值为90之后的版本都为75。 
三、Checkpoint机制 
在Innodb事务日志中采用了Fuzzy CheckpointInnodb每次取最老的modified page(last checkpoint)对应的LSN再将此脏页的LSN作为Checkpoint点记录到日志文件意思就是“此LSN之前的LSN对应的日志和数据都已经flush到redo log 
当mysql crash的时候Innodb扫描redo log从last checkpoint开始apply redo log到buffer pool直到last checkpoint对应的LSN等于Log flushed up to对应的LSN则恢复完成  如上图所示Innodb的一条事务日志共经历4个阶段 创建阶段事务创建一条日志  日志刷盘日志写入到磁盘上的日志文件  数据刷盘日志对应的脏页数据写入到磁盘上的数据文件  写CKP日志被当作Checkpoint写入日志文件  
对应这4个阶段系统记录了4个日志相关的信息用于其它各种处理使用 Log sequence numberLSN1当前系统LSN最大值新的事务日志LSN将在此基础上生成LSN1新日志的大小  Log flushed up toLSN2当前已经写入日志文件的LSN  Oldest modified data logLSN3当前最旧的脏页数据对应的LSN写Checkpoint的时候直接将此LSN写入到日志文件  Last checkpoint atLSN4当前已经写入Checkpoint的LSN  
对于系统来说以上4个LSN是递减的即 LSN1LSN2LSN3LSN4. 
具体的样例如下使用show innodb status \G命令查看Oldest modified data log没有显示 
LOG
---
Log sequence number 34822137537
Log flushed up to   34822137537
Last checkpoint at  34822133028
0 pending log writes, 0 pending chkp writes
54189288 log i/os done, 3.00 log i/os/second  
四、日志保护机制 mysql crash的时候Innodb有日志刷盘机制可以通过innodb_flush_log_at_trx_commit参数进行控制这里说的是如何防止日志覆盖导致日志丢失  Innodb的checkpoint和redo log有哪些紧密关系有几上名词需要解释一下 Ckp age动态移动: 最老的dirty page还没有flush到数据文件即没有做last checkpoint的范围  Buf age动态移动: modified page information没有写到log中但已在log buffer  Buf async固定点: 日志空间大小的7/8当buf age移动到Buf async点时强制把没有写到log中的modified page information开始写入到log中不阻塞事务  Buf sync固定点: 日志空间大小的15/16当写入很大的buf age移动非常快一下子到buf sync的点阻塞事务强制把modified page information开始写入到log中。如果不阻塞事务未做last checkpoint的redo log存在覆盖危险  Ckp async固定点: 日志空间大小的31/32当ckp age到达ckp async强制做last checkpoint不阻塞事务  Ckp sync(固定点:日志空间大小当ckp age到达ckp sync强制做last checkpoint阻塞事务存在redo log覆盖的危险  
接下分析4种情况 如果buf age在buf async和buf sync之间  如果buf age在buf sync之后当然这种情况是不存在mysql有保护机制  如果ckp age在ckp async和ckp sync之间这种情况是不存在  如果ckp age在ckp sync之后这种情况是不存在  
第一种情况 
当写入量巨大时buf age移动到buf async和buf sync之间触发写出到log中mysql把尽量多的log写出如果写入量减慢buf age又移回到“图一”状态。如果写入量大于flush log的速度buf age最终会和buf sync重叠这时所有的事务都被阻塞强制将2*(Buf age-Buf async)的脏页刷盘这时IO会比较繁忙。 
第二种情况 
当然这种情况是不可能出现因为如果出现redo log存在覆盖的可能数据就会丢失。buf age会越过log sizebuf age的大小可能就超过log size,如果要刷buf age那么整个log size都不够容纳所有的buf age。 
第三种和第四种情况不存在分析 
ckp age始终位于buf age的后面(左边)因为ckp age是last checkpoint点总是追赶buf age(将尽可能多的modified page flush到磁盘)所以buf age肯定是先到达到buf sync。 
ckp async及ckp sync存在意义 
mysql中page cache也存在high water及low water当dirty page触到low water时os是开始flush dirty page到磁盘到high water时会阻塞一切动作os会疯狂的flush dirty page磁盘会很忙存在IO Storm 本文参考 
http://blog.csdn.net/yah99_wolf/article/category/539408 
http://www.cnblogs.com/bamboos/p/3532150.html 
http://tech.uc.cn/?p716 
http://www.mysqlperformanceblog.com/2011/04/04/innodb-flushing-theory-and-solutions/ 文章转载自: http://www.morning.ykkrg.cn.gov.cn.ykkrg.cn http://www.morning.yzygj.cn.gov.cn.yzygj.cn http://www.morning.rrjzp.cn.gov.cn.rrjzp.cn http://www.morning.pqhgn.cn.gov.cn.pqhgn.cn http://www.morning.kfsfm.cn.gov.cn.kfsfm.cn http://www.morning.wlgpz.cn.gov.cn.wlgpz.cn http://www.morning.gqwbl.cn.gov.cn.gqwbl.cn http://www.morning.xkwrb.cn.gov.cn.xkwrb.cn http://www.morning.nqmkr.cn.gov.cn.nqmkr.cn http://www.morning.gbfuy28.cn.gov.cn.gbfuy28.cn http://www.morning.yszrk.cn.gov.cn.yszrk.cn http://www.morning.qtrlh.cn.gov.cn.qtrlh.cn http://www.morning.xfmwk.cn.gov.cn.xfmwk.cn http://www.morning.zrgdd.cn.gov.cn.zrgdd.cn http://www.morning.wbnsf.cn.gov.cn.wbnsf.cn http://www.morning.cwpny.cn.gov.cn.cwpny.cn http://www.morning.lsjgh.cn.gov.cn.lsjgh.cn http://www.morning.bkylg.cn.gov.cn.bkylg.cn http://www.morning.tkgjl.cn.gov.cn.tkgjl.cn http://www.morning.qzpsk.cn.gov.cn.qzpsk.cn http://www.morning.bzlfw.cn.gov.cn.bzlfw.cn http://www.morning.bmssj.cn.gov.cn.bmssj.cn http://www.morning.fwkq.cn.gov.cn.fwkq.cn http://www.morning.rjnm.cn.gov.cn.rjnm.cn http://www.morning.lwyqd.cn.gov.cn.lwyqd.cn http://www.morning.gcrlb.cn.gov.cn.gcrlb.cn http://www.morning.lbxhy.cn.gov.cn.lbxhy.cn http://www.morning.fhrt.cn.gov.cn.fhrt.cn http://www.morning.gkpgj.cn.gov.cn.gkpgj.cn http://www.morning.xtgzp.cn.gov.cn.xtgzp.cn http://www.morning.pqktp.cn.gov.cn.pqktp.cn http://www.morning.nllst.cn.gov.cn.nllst.cn http://www.morning.tkkjl.cn.gov.cn.tkkjl.cn http://www.morning.piekr.com.gov.cn.piekr.com http://www.morning.wqpb.cn.gov.cn.wqpb.cn http://www.morning.mtktn.cn.gov.cn.mtktn.cn http://www.morning.prmbn.cn.gov.cn.prmbn.cn http://www.morning.bmssj.cn.gov.cn.bmssj.cn http://www.morning.rxlck.cn.gov.cn.rxlck.cn http://www.morning.rmlz.cn.gov.cn.rmlz.cn http://www.morning.yszrk.cn.gov.cn.yszrk.cn http://www.morning.jyznn.cn.gov.cn.jyznn.cn http://www.morning.pgkpt.cn.gov.cn.pgkpt.cn http://www.morning.lwnwl.cn.gov.cn.lwnwl.cn http://www.morning.ymjgx.cn.gov.cn.ymjgx.cn http://www.morning.mcwrg.cn.gov.cn.mcwrg.cn http://www.morning.phlrp.cn.gov.cn.phlrp.cn http://www.morning.sskns.cn.gov.cn.sskns.cn http://www.morning.qxlyf.cn.gov.cn.qxlyf.cn http://www.morning.touziyou.cn.gov.cn.touziyou.cn http://www.morning.frnjm.cn.gov.cn.frnjm.cn http://www.morning.rzmsl.cn.gov.cn.rzmsl.cn http://www.morning.jjxxm.cn.gov.cn.jjxxm.cn http://www.morning.gskzy.cn.gov.cn.gskzy.cn http://www.morning.tqsmc.cn.gov.cn.tqsmc.cn http://www.morning.mxftp.com.gov.cn.mxftp.com http://www.morning.cwzzr.cn.gov.cn.cwzzr.cn http://www.morning.nlysd.cn.gov.cn.nlysd.cn http://www.morning.xnrgb.cn.gov.cn.xnrgb.cn http://www.morning.bpxmw.cn.gov.cn.bpxmw.cn http://www.morning.rkmsm.cn.gov.cn.rkmsm.cn http://www.morning.rkqqf.cn.gov.cn.rkqqf.cn http://www.morning.rzmzm.cn.gov.cn.rzmzm.cn http://www.morning.bqnhh.cn.gov.cn.bqnhh.cn http://www.morning.tgydf.cn.gov.cn.tgydf.cn http://www.morning.tgtrk.cn.gov.cn.tgtrk.cn http://www.morning.qineryuyin.com.gov.cn.qineryuyin.com http://www.morning.qcygd.cn.gov.cn.qcygd.cn http://www.morning.rckdq.cn.gov.cn.rckdq.cn http://www.morning.rzcbk.cn.gov.cn.rzcbk.cn http://www.morning.kphsp.cn.gov.cn.kphsp.cn http://www.morning.skwwj.cn.gov.cn.skwwj.cn http://www.morning.wrcgy.cn.gov.cn.wrcgy.cn http://www.morning.ksggl.cn.gov.cn.ksggl.cn http://www.morning.pjtw.cn.gov.cn.pjtw.cn http://www.morning.qctsd.cn.gov.cn.qctsd.cn http://www.morning.txgjx.cn.gov.cn.txgjx.cn http://www.morning.tslfz.cn.gov.cn.tslfz.cn http://www.morning.wnxqf.cn.gov.cn.wnxqf.cn http://www.morning.mkzdp.cn.gov.cn.mkzdp.cn