首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL Server2005和2008中,如何判断我使用的是悲观并发模型还是乐观并发模型?

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

Stack Overflow用户
提问于 2012-05-17 16:08:12
回答 3查看 1.8K关注 0票数 2

我知道SQL Server2000有一个悲观的并发模型。SQL Server2005中增加了乐观模型。那么,如何判断在SQL Server2005和2008中使用的是悲观并发模型还是乐观并发模型呢?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-20 00:33:29

SQL 2005 (和2008)引入了快照隔离。这是迁移到乐观并发的方法。看一看Transaction Isolation and the New Snapshot Isolation Level article

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2012-05-19 22:28:41

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

在SQL Server 2005+上

  • 如果您正在使用未提交读取、可重复读取或可序列化隔离级别,则您正在使用悲观并发模型。
  • 如果您正在使用快照隔离级别,则您正在使用乐观并发模型。
  • 如果您正在使用已提交读取隔离级别,并且数据库设置read_committed_snapshotON,则您正在使用乐观并发模型
  • 如果您正在使用已提交读取隔离级别,并且数据库设置OFF为,则您正在使用悲观并发模型

不过,我还是需要确认一下。此外,如果有一些代码来测试并发模型,那就更好了。

票数 0
EN

Stack Overflow用户

发布于 2012-05-19 22:54:00

基本上:

悲观:您只为自己锁定记录,直到您完成它。因此读取提交的事务隔离级别。(并不像你说的那样未提交)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10631987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档