Optimistic Concurrency VS. Pessimistic Concurrency Control
原创地址:http://www.cnblogs.com/jfzhu/p/4009918.html
转载请注明出处
(一)为什么需要并发控制机制
并发控制机制是为了防止多个用户同时更改同一条数据,也可以防止一个用户在更改数据的同时造成另一个用户看到”过期”的数据。下面看一个例子就明白了。
John和Marry有一个联合银行帐户,帐户的余额是$1000,John向帐户里存入了$500,Marry取走了$500,如果没有并发控制,John最后看到的余额是$1500,而Marry看到的帐户余额是$500。

而如果使用了并发控制机制,在John读取帐户余额的时候,该帐户就被锁死了,Mary没有办法读取或者修改该帐户,直到John完成操作,把锁释放了。

(二)Optimistic Concurrency Control与Pessimistic Concurrency Control
有两种并发控制机制,Optimistic concurrency control(乐观?)和Pessimistic concurrency control(悲观?),两者之间的区别是:
Pessimistic concurrency control使用的机制是用户A在读取或修改某条记录(rows)时,将该记录锁死,防止其他用户同时读取或修改同一条记录。直到用户A释放掉锁,其他用户才可以对记录读取或修改,所以Pessimistic Lock的缺点是容易导致系统性能瓶颈。
Optimistic concurrency control在某条记录被读取时不会将记录锁死,只有当发现某条记录被多个用户同时修改的时候,其中一个用户的修改可以被提交(commit),其他用户会收到一个异常告知他们的修改没有成功。
(三)SQL Server
SQL Server默认使用的是Pessimistic Concurrency Control,数据库隔离级别(isolation level)是read committed。从SQL Server 2005开始,微软增加了对Optimistic Concurrency Control的支持,两个新的数据库隔离级别,SNAPSHOT 和 READ COMMITTED SNAPSHOT isolation (RCSI)
SQL Server支持的隔离级别有如下几个:
|
Isolation level |
Dirty read |
Non-repeatable read |
Phantom |
|
Read uncommitted |
Yes | Yes | Yes |
|
Read committed |
No | Yes | Yes |
|
Repeatable read |
No | No | Yes |
| Snapshot | No | No | No |
|
Serializable |
No | No | No |
设置隔离级别可以用以下命令:
SET TRANSACTION ISOLATION LEVEL
查看隔离级别可以使用:
SELECT CASE transaction_isolation_level
WHEN 0 THEN 'Unspecified'
WHEN 1 THEN 'ReadUncommitted'
WHEN 2 THEN 'ReadCommitted'
WHEN 3 THEN 'Repeatable'
WHEN 4 THEN 'Serializable'
WHEN 5 THEN 'Snapshot' END AS TRANSACTION_ISOLATION_LEVEL
FROM sys.dm_exec_sessions
where session_id = @@SPID
或者
DBCC useroptions
SQL Server默认使用的隔离级别是Read Committed。
(四)Dynamics CRM
Microsoft Dynamics CRM 2013 实施指南中提到:
运行使用 SQL Server(配置了已提交读快照隔离 (RCSI))的 Microsoft Dynamics CRM 将获得商业上合理的支持。商业上合理的支持是指 Microsoft 客户支持服务所提供的、不需要修改 Microsoft Dynamics CRM 代码的所有合理的支持。—参见 《SQL Server deployment》
但是有一些文章并不建议使用RCSI,比如《The Potential Dangers of the Read Committed Snapshot Isolation Level》,所以我也不建议将数据库隔离级别修改为RCSI。
(五)总结
本文介绍了为什么要使用并发控制机制,什么是Optimistic Concurrency Control和Pessimistic Concurrency Control,SQL Server所使用的并发控制机制,如何设置和查看数据库的隔离级别,以及Dynamics CRM需要慎用RCSI。

Optimistic Concurrency VS. Pessimistic Concurrency Control的更多相关文章
- 第17/24周 悲观并发控制(Pessimistic Concurrency)
大家好,欢迎回到性能调优培训.今天标志着第5个月培训的开始,这个月我们会谈论SQL Server里的锁.阻塞和死锁(Locking, Blocking, and Deadlocking). SQL S ...
- Optimistic concurrency control
Optimistic concurrency control https://en.wikipedia.org/wiki/Optimistic_concurrency_control Optimist ...
- Optimistic concurrency control 死锁 悲观锁 乐观锁 自旋锁
Optimistic concurrency control https://en.wikipedia.org/wiki/Optimistic_concurrency_control Optimist ...
- Concurrency vs. Parallelism
http://getakka.net/docs/concepts/terminology Terminology and Concepts In this chapter we attempt to ...
- Concurrency Is Not Parallelism (Rob pike)
Rob pike发表过一个有名的演讲<Concurrency is not parallelism>(https://blog.golang.org/concurrency-is-not- ...
- Entity Framework Tutorial Basics(28):Concurrency
Concurrency in Entity Framework: Entity Framework supports Optimistic Concurrency by default. In the ...
- [Hive - LanguageManual] Hive Concurrency Model (待)
Hive Concurrency Model Hive Concurrency Model Use Cases Turn Off Concurrency Debugging Configuration ...
- WCF Concurrency (Single, Multiple, and Reentrant) and Throttling
http://www.codeproject.com/Articles/89858/WCF-Concurrency-Single-Multiple-and-Reentrant-and Introduc ...
- Jmeter系列(11)- 并发线程组Concurrency Thread Group详解
如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html Concurrency Thread ...
随机推荐
- 学习微信小程序之css9内边距
padding内边距 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- NPM 使用淘宝镜像
--registry https://registry.npm.taobao.org
- vsftp匿名用户搭建
./configure出现: 请装: 出现这个: 请装 然后: ln -sv /lib/security/pam_mysql.so /lib64/security/
- 给mac配置adb 路径
给mac配置adb 路径 (1)找到对应的adb 所在路径 /Users/***/Library/Android/sdk/platform-tools (2)启动终端,输入 cd $Home (3)输 ...
- [Noip2016]蚯蚓 D2 T2 队列
[Noip2016]蚯蚓 D2 T2 Description 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯 ...
- unison+inotify-tools触发式双向自动同步
双向实时数据同步部署 首先添加服务器ssh信任,即免秘钥登陆 Web1:192.168.10.36 Web2:192.168.10.37 分别在web1和web2上执行以下命令 mkdir ~/.ss ...
- python 编码问题
参考原文:http://www.crifan.com/eclipse_pydev_console_messy_char_for_console_is_utf8/ 通用 rq = urllib.urlo ...
- spark shuffle 相关细节整理
1.Shuffle Write 和Shuffle Read具体发生在哪里 2.哪里用到了Partitioner 3.何为mapSideCombine 4.何时进行排序 之前已经看过spark shuf ...
- 【BZOJ】4144: [AMPPZ2014]Petrol
题意 给定一个\(n\)个点.\(m\)条边的带权无向图,其中有\(s\)个点是加油站.每辆车都有一个油量上限\(b\),即每次行走距离不能超过\(b\),但在加油站可以补满.\(q\)次询问,每次给 ...
- Notepad++ 默认快捷键
Notepad++绝对是windows下进行程序编辑的神器之一,要更快速的使用以媲美VIM,必须灵活掌握它的快捷键,下面对notepad++默认的快捷键做个整理(其中有颜色的为常用招数): 1 ...