Due to popular request (Hey, David's popular, right?), I'm posting a
patch for Serializable Snapshot Isolation (SSI), although I don't
yet have everything in it that I was planning on submitting before
the CF. I will probably be submitting another version before the
deadline with the following, but there should be plenty here for
people to test and benchmark. We're done with the major refactoring
needed to address concerns raised in earlier reviews, and I don't
expect the remaining work to destabilize what's there or to have a
significant impact on performance.
(1) A README file needs to be prepared, mostly by copy/paste from
portions of the Wiki page at:
http://wiki.postgresql.org/wiki/Serializable
(2) The Concurrency Control chapter needs some major work:
http://developer.postgresql.org/pgdocs/postgres/mvcc.html
(3) Recent changes to index page split/combine logic are still
being tested.
(4) Two Phase Commit (2PC), used for distributed transactions,
needs work to move some of the SSI logic executed during PREPARE
TRANSACTION to COMMIT PREPARED.
(5) Index AMs other than btree need to be modified to support
fine-grained predicate locking. Currently GiST, GIN, and hash
indexes work correctly (in the sense of not allowing anomalies) by
acquiring SIRead locks at the index relation level. False positive
rw-conflicts, which could ultimately lead to transaction rollbacks,
will be more frequent when using these index access methods until
this work is done.
-Kevin