mysql回滚日志与重做日志

基础知识:数据都是先读到内存中,然后修改内存中的数据,最后将数据写回磁盘。

这里把数据库内容在磁盘上的部分叫data file,把数据库内容在内存中的缓存叫data buffer。data buffer与data file内容不同,此时把data buffer的内容叫脏数据,但是不能每次事务提交时都同步到磁盘,这样磁盘IO开销太大,应该等到data buffer内数据比较多时再全部更新到磁盘。

这里把日志磁盘上的文件叫log file,把日志在内存上的缓存叫log buffer。log buffer与log file内容也不同,但是日志可以经常性地持久化到磁盘,因为日志文件是顺序写的,所以同步日志的开销远比同步数据的开销要小。

必须保证脏页数据在同步到磁盘前,该数据页相对应的日志记录已经刷新到磁盘中。

每次执行事务,回滚日志中记录的是旧值,用于事务失败时进行回滚,重做日志中记录的是新值,用于恢复那些宕机时未写入data file的已成功事务。

undo是保证原子性,redo是保证持久化。

1. 事务开始时,记录START T
2. 事务修改时,记录(T,x,v),说明事务T操作对象x,x的值为v 
3. 事务结束时,记录COMMIT T 

undo log

回滚日志的作用就是,当系统恢复时,扫描日志发现有的事务只有开始标志没有提交标志,就可以按照记录的旧值,将这些未提交的事务回滚到未执行事务的状态。

redo log

重做日志的作用就是,当系统恢复后,可以根据重做日志把已经提交的事务重做一遍。(或者说不是重做一遍,而是直接写入记录的新值就行了)

检查点

每次把data buffer里的内容同步到data file中后,就会在日志中记录对应的检查点,说明了这个检查点之前的已提交事务都已经写入磁盘,所以系统恢复后扫描日志时只需要看检查点后面的内容,可以加快恢复速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值