数据库Read Commit小记

数据库Read Commit小记

最近在看数据库的事物问题,这里小记一下Read Commit的一些原理。如下图:

数据库Read Commit小记_第1张图片

数据库的事物操作离不开锁这个概念,如图所示,假设目前有三个transaction,分别为Tx、Tx1和Tx2。在当前Tx上面的A时刻发起查询操作,那么在这个时候会记录查询query的出生锁序列号Birth LSN。先假定查询返回结果是在A之后的5秒,那么在这个时间过程中,数据可能发生了很多变化。

假设Tx的查询所涉及到的数据记录在Block0中,那么在查询过程中经过以下几个步骤:

  • S1 : 找出Block0的Safe LSN(指该数据块上次做DML操作的时间序号),如果SafeLSN>BirthLSN说明在A时刻之后,有DML操作对该数据库进行改动,那么为了保证事物的一致性,需要提取对应的数据库日志,回滚到A时刻。ex:如果发现A之后进行的insert操作,那么回滚的时候就做delete操作。
  • S2上一步操作只对自身的transaction做了处理,如果当前有多个transaction,那么需要找到其他的transaction在这个时间过程中有没有对Block0进行修改。如上图,只有Tx1操作过该数据库,那么把Tx1回滚到其开始时间BeginLSN。
  • S3 : 最后,在Tx1返回到BeginLSN之后,对数据块进行直到A时刻的逆undo。

你可能感兴趣的:(数据库Read Commit小记)