-
PostGreSQL多版本实现中的几个问题
Posted on 十二月 4th, 2009 No comments1.如何标志一个版本
2.如何判断可见性
3.Halloween问题
4.当需要更新发现当前可见的tuple已经被其他事务更新的时候技术 MVCC, PostGreSQL, 推荐 -
PostGreSQL之MVCC分析终结篇
Posted on 十月 15th, 2009 No comments从9月中旬开始的PostGreSQL代码阅读+MVCC,至今总算告一段落。此次分析,既有意料之中,亦有出乎意料。意料之中的是过程复杂曲折,意料之外的是PostGreSQL的MVCC实现居然如此简单。
技术 MVCC, PostGreSQL, 推荐 -
PostGreSQL之MVCC代码分析(1):概览
Posted on 九月 21st, 2009 1 commentTransaction启动时形成快照就是要记录该Transaction可见的TransactionID,排除不可见的ID。PostGreSQL中每一个版本的数据有两个ID,其中一个是CreationID即插入该数据的TransactionID,一个是ExpiredID,即删除或更新该数据的TransactionID。对一个Transaction可见的数据的ID要满足以下条件:
1.CreationID<当前TransactionID
2.ExpiredID>当前TransactionID或ExpiredID不存在Transaction启动形成快照的过程:
遍历当前所有活动的Transaction,记录在一个活动Transaction的ID数组中;根据Transaction的先后顺序,选择当前Transaction可见的最小TransactionID,记录在xmin,选择可见的最大TransactionID,记录在xmax中。PostGreSQL8.5中进行最终的版本选择是在从外存中获取一个页面的数据之后,由一个检验函数(HeapTupleSatisfiesMVCC等一系列函数)检验所有该页面数据的数据对当前Transaction的可见性,如果不可见,则将数据除去,最后返回所有可见数据。
技术 MVCC, PostGreSQL, 代码 -
PostGreSQL之MVCC代码分析
Posted on 九月 9th, 2009 No commentsMVCC(多版本并发控制)是数据库中用以实现事务Lock-Free的方式之一。相对于传统的两段锁等方式的事务并发处理机制,MVCC在读写同时操作时并不需要加锁,而只在两个写操作同时进行时,才加一个互斥锁。其实现思想是展示给每个事务该事务开始时数据库的快照。
技术 MVCC, PostGreSQL, 推荐, 数据库

滔滔不绝