3 / 14
第二节:实现
***************说明****************************************
1.隔离性由锁机制实现。
2.原子性、一致性、持久性通过数据库的 redo 和 undo 来完成。
*******************redo***********************************
1.在 InnoDB 存储引擎中,事务日志通过重做(redo)日志文件和
InnoDB 存储引擎的日志缓冲(InnoDB Log Buffer)来实现。
2.当开始一个事务时,会记录该事务的一个 LSN(Log Sequence
Number,日志序列号)。
3.当事务执行时,会往 InnoDB 存储引擎的日志缓冲里插入事务日
志。
4.当事务提交时,必须将 InnoDB 存储引擎的日志缓冲写入磁盘,
默认的实现,即 innodb_flush_log_at_trx_commit=1.
5.也就是在写数据前,需要先写日志,这种方式成为预写日志方式
(Write-Ahead Logging,WAL).
6.InnoDB 存储引擎通过预写日志的方式来保证事务的完整性,这意
味着磁盘上存储的数据页和内存缓冲池中的页是不同步的。
7.对于内存缓冲池中页的修改,先是写入重做日志文件,然后再写
入磁盘,因此是一种异步的方式。
8.可以通过 show engine innodb status 来观察当前磁盘和日志的差
距,在 log 部分,log sequence number 表示当前的 lsn,而 log
flushed up to 表示刷新到重做日志文件的 lsn,而 last checkpoint
at 表示刷新到磁盘的 lsn。
9.在一个事务中从日志缓冲刷新到重做日志文件,并不只是在事务
提交时发生,每秒都会有从日志缓冲刷新到重做日志文件的动作。
**************undo***************************************
1.重做日志记录了事务的行为,可以很好地通过其进行重做。
2.但是事务有时还需要撤销,这就需要 undo。