在Yukon之前,Oracle的多版本读一致性的出色实现使得并发性比 SQL Server 好得多。SQL Server 以前的版本没有版本读一致性的特性,全部是“悲观”(pessimistic)锁的方式:所有的事务都需要锁。Yukon 中最大的一个特色是实现了快照隔离机制。所以发布的白皮书也为此浓墨重彩。快照隔离总是从已提交的数据快照读取数据。允许数据被只读事务读取。所以 SI 对只读事务的并发控制效果是很好的,但是对更新事务是否也这样不得而知。对长时间运行的更新事务来说更为不利于与短期的高竞争性事务。相比之下,Oracle提供了事务更新功能,但是不提供First-committer-wins 保护。二者现在都是行级锁。
Yukon 的 Read Committed Snapshot 需要数据库管理员来激活。这多少体现了微软的不自信(白皮书中说,管理员需要激活每一个需要 SI 的数据库)!并且,如果跨数据库的事务试图使用 SI ,而不是所有数据库都设定的话,则该事务会失败。这无疑给可扩展性带来一定的障碍。看来微软要实现自己的比 SQL 92 规范还要强的 SI 还有很多路要走。
参考信息