2008年(239)
分类: Sybase
2008-06-17 23:19:04
使用多版本时间戳机制,每一个事务在开始执行前,系统都为它分配一个静态的、唯一的时间戳。对系统中的每一个数据项,有一个版本序列与之关联。每一个数据(记为Q)的版本包含三个方面的内容:
(1)版本的数值:C(Q)
(2)创建数据版本的事务时间戳:W(Q)
(3)读取数据版本的所有事务的最大时间戳:R(Q)
事务对数据的查询操作,不用等待、直接选择数据的最近可用版本进行读取。如果一个事务的时间戳大于数据版本的R(Q),就使用该事务时间戳更新R(Q)。
事务对数据的更新操作,要使用数据最近可用版本的W(Q)、R(Q),和事务的时间戳进行比较,根据一系列规则,决定事务是回滚、继续执行还是创建新的数据版本。
数据库中不再需要的数据版本,需要进行删除以释放磁盘空间。系统根据以下的规则进行删除。假设有某数据项的两个版本,两个版本的W(Q)都小于系统中最老只读事务的时间戳,那么两个版本中较旧的那个版本将不会再被使用,因而可以删除。
对多版本时间戳机制的使用,要考虑所存在的以下两个问题:
(1)读取数据项,要求更新数据版本的R(Q),于是产生两次潜在的磁盘访问而不是一次。
(2)事务间的冲突通过回滚解决而不是等待,这种做法开销可能很大。