在SQL Server 2005和2008中,如何判断我使用的是悲观并发模型还是乐观模型?

时间:2012-05-17 08:08:12

标签: sql-server concurrency optimistic-locking pessimistic-locking

我知道SQL Server 2000有一个悲观的并发模型。并且在SQL Server 2005中添加了乐观模型。那么如何判断我是在SQL Server 2005和2008中使用悲观并发模型还是乐观模型?

感谢。

3 个答案:

答案 0 :(得分:2)

SQL 2005(和2008)引入了SNAPSHOT隔离。这是转向乐观并发的方法。看看Transaction Isolation and the New Snapshot Isolation Level article

Isolation level     Dirty Reads    Non-repeatable Phantom reads  Concurrency 
                                   reads                         control
READ UNCOMMITTED     Yes           Yes            Yes            Pessimistic
READ COMMITTED       No            Yes            Yes            Pessimistic
(with locking)    
READ COMMITTED       No            Yes            Yes            Optimistic
(with snapshot)
REPEATABLE READ      No            No             Yes            Pessimistic
SNAPSHOT             No            No             No             Optimistic
SERIALIZABLE         No            No             No             Pessimistic

答案 1 :(得分:0)

阅读微软的一些文章和文件后。我得出以下结论。

在SQL Server 2005 +

  • 如果您使用读取未提交可重复读取可序列化隔离级别,则使用悲观并发模型。
  • 如果您使用的是 snapshot 隔离级别,则使用的是乐观并发模型。
  • 如果您使用读取已提交隔离级别且数据库设置 read_committed_snapshot 开启,那么您使用的是乐观并发模型
  • 如果您使用读取已提交隔离级别且数据库设置 read_committed_snapshot OFF ,那么您使用的是悲观并发模型

但是,我还需要确认。另外,如果有一些代码来测试并发模型会很棒。

答案 2 :(得分:0)

基本上:

悲观:你只为你锁定记录,直到你完成它。因此,请阅读已提交事务隔离级别。 (如你所说,并非未提交)

乐观并发控制的工作原理是多个用户之间的资源冲突不太可能,并且它允许在不锁定任何资源的情况下执行事务。仅在事务尝试更改数据时才检查资源。这确定是否发生了任何冲突(例如,通过检查版本号)。如果发生冲突,应用程序必须读取数据并再次尝试更改。 产品不提供乐观并发控制,但您可以通过跟踪数据库访问手动将其构建到应用程序中。 (Source