2

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

谢谢。

4

3 回答 3

2

SQL 2005(和 2008)引入了 SNAPSHOT 隔离。这是转向乐观并发的方法。查看事务隔离和新的快照隔离级别文章

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
于 2012-05-19T16:33:29.433 回答
0

基本上:

悲观:你只为你锁定记录,直到你完成它。所以读取提交的事务隔离级别。(不是你说的不承诺)

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

于 2012-05-19T14:53:59.707 回答
0

在阅读了微软的一些文章和文档之后。我得到以下结论。

在 SQL Server 2005+ 上

  • 如果您使用未提交读可重复读或可序列化隔离级别,那么您使用的是悲观并发模型。
  • 如果您使用快照隔离级别,则您使用的是乐观并发模型。
  • 如果您使用读提交隔离级别并且数据库设置read_committed_snapshotON,那么您使用的是乐观并发模型
  • 如果您使用读提交隔离级别并且数据库设置read_committed_snapshotOFF,那么您使用的是悲观并发模型

但是,我仍然需要确认。此外,如果有一些代码可以测试并发模型,那就太好了。

于 2012-05-19T14:28:41.333 回答