MySql重做日志与CheckPoint

本文探讨了数据库管理系统中的Write Ahead Log(WAL)策略,它在事务提交时先写日志再修改数据,以确保数据一致性。同时,介绍了CheckPoint技术,通过定时保存数据状态来加速恢复过程并降低磁盘存储压力。Checkpoint分为Sharp和Fuzzy两种类型,分别在数据库关闭和特定场景下执行,以平衡性能和数据安全性。通过对脏页的管理和重做日志的覆盖,有效控制资源使用和恢复效率。
摘要由CSDN通过智能技术生成

1,Write Ahead Log


页每一次发生的变化,都将新页的版本刷新到磁盘会导致IO次数增多,影响数据库的性能,所以引入了缓存的概念。
但是数据的修改都存入到缓存中也会有以下几个问题:
   I. 缓冲池需要足够的大缓存数据库中的所有数据,内存的开销大大增多
   II. 机器宕机时,会导致数据的丢失

   
   Write Ahead Log的策略就是当事务提交的时候,先写重做日志,然后再修改页。


2,CheckPoint 


做日志能够有效的防止宕机时数据丢失的问题,但是并不是每次都要将重做日志中的所有非select语句都执行一次,
数据量大的时候,数据恢复的时间与成本也会变得越来越高


    重做日志的checkPoint技术


        对于checkpoint之前的页都已经刷新到了磁盘中,所以当下一次重做日志读取恢复的时候,只会执行checkPoint之后的数据
        重做日志对于物理存储的压力问题,checkpoint之前的数据,在配置的时间范围之外,进行新的重做日志复盖,保证物理磁盘
        占用不会过高,资源的重复使用。
        
        优势:
            1,缩短数据库的恢复时间
            2,缓冲池不够用时,可以将脏页刷新到磁盘,减轻缓冲池的压力
            3,重做日志不可用时,刷新脏页


          
3,Sharp Checkpoint & Fuzzy Checkpoint



   Sharp Checkpoint:
        发生在数据库关闭时,会将所有的脏页都刷新到磁盘,默认的工作方式,配置参数 innodb_fast_shutdown = 1
        
    Fuzzy Checkpoint:
        对于特定的缓冲池与后台线程场景应用:
        1,Master Thread Checkpoint:
            对于Master Thread中的Checkpoint,差不多以每十秒的速度从缓冲池中的脏页列表中刷新一定比例的页回磁盘(异步)
            
        2,Flush_LRU_LIST Checkpoint:
            InnoDB有需要保证LRU列表中有超过100个空闲页可以提供使用,当不满足时,从LRU列表的尾端删除,但是只对脏页数据
            进行刷新到磁盘,其它作为非热点数据从缓冲池中消除
            
        3,Async/Sync Flush Checkpoint:
            重做日志不可用时(重做日志的大小超过某个设定的阈值发生告警时),强制将一些页异步刷新回磁盘。
            两个参数:sync_water_mark & async_water_mark
            默认情况下: sync_water_mark = 90% * total_redo_log_file
                         async_water_mark = 75% * total_redo_log_file
                         
            I.   checkpoint_age < async_water_mark 不刷新任何脏页到磁盘
            II.  async_water_mark< checkpoint_age < sync_water_mark 刷新脏页到磁盘,直到满足 checkpoint_age < async_water_mark
            III. sync_water_mark < checkpoint_age一般不会出现该情况,除非写入远远的大于刷新,一般是设置的重做日志大小过小才会导致,同II
            刷新到满足checkpoint_age < async_water_mark
            
        4,Dirty Page too much Checkpoint:
            脏页的数量过多,超过了配置的阈值,强制执行的刷新。阈值控制参数:innodb_max_dirty_pages_pct,默认情况是75(75%)


--相关命令



查看innodb_max_dirty_pages_pct配置参数百分比: show variables like 'innodb_max_dirty_pages_pct'  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值