下面可以乘凉的不一定是大树,但大树底下一定是可以乘凉的。
RSS icon
  • 

    PostGreSQL多版本实现中的几个问题

    Posted on 十二月 4th, 2009 大树 No comments

    1.如何标志一个版本
    2.如何判断可见性
    3.Halloween问题
    4.当需要更新发现当前可见的tuple已经被其他事务更新的时候

  • 

    PostGreSQL之MVCC分析终结篇

    Posted on 十月 15th, 2009 大树 No comments

    从9月中旬开始的PostGreSQL代码阅读+MVCC,至今总算告一段落。此次分析,既有意料之中,亦有出乎意料。意料之中的是过程复杂曲折,意料之外的是PostGreSQL的MVCC实现居然如此简单。

  • 

    PostGreSQL之MVCC代码分析(1):概览

    Posted on 九月 21st, 2009 大树 1 comment

    Transaction启动时形成快照就是要记录该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的可见性,如果不可见,则将数据除去,最后返回所有可见数据。

  • 

    PostGreSQL之MVCC代码分析

    Posted on 九月 9th, 2009 大树 No comments

    MVCC(多版本并发控制)是数据库中用以实现事务Lock-Free的方式之一。相对于传统的两段锁等方式的事务并发处理机制,MVCC在读写同时操作时并不需要加锁,而只在两个写操作同时进行时,才加一个互斥锁。其实现思想是展示给每个事务该事务开始时数据库的快照。