db2没有mvcc, 只有已提交读和脏读这种类型的并发控制。内部通过内存里的锁机制来实现。有时候需要从日志里找到历史页面来获取非脏读的信息。PG是追加更新来实现mvcc。数据insert时候会加上xmin事务号,update的数据并不删除原数据,而是加上删除事务号xmax,然后追加插入新版...
显示全部db2没有mvcc, 只有已提交读和脏读这种类型的并发控制。内部通过内存里的锁机制来实现。有时候需要从日志里找到历史页面来获取非脏读的信息。
PG是追加更新来实现mvcc。数据insert时候会加上xmin事务号,update的数据并不删除原数据,而是加上删除事务号xmax,然后追加插入新版本的数据。delete也是加删除事务号xmax。通过比对事务号和xmin xmax来判断数据是否可见,从而实现MVCC。这种方式会带来数据和索引膨胀的问题,需要注意。
收起