Optimistic Concurrency VS. Pessimistic Concurrency Control

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

(一)为什么需要并发控制机制

并发控制机制是为了防止多个用户同时更改同一条数据,也可以防止一个用户在更改数据的同时造成另一个用户看到”过期”的数据。下面看一个例子就明白了。

John和Marry有一个联合银行帐户,帐户的余额是$1000,John向帐户里存入了$500,Marry取走了$500,如果没有并发控制,John最后看到的余额是$1500,而Marry看到的帐户余额是$500。

 

Picture1

 

 

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

 

Picture2

 

 

(二)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。










本文转自JF Zhu博客园博客,原文链接:   http://www.cnblogs.com/jfzhu/p/4009918.html ,如需转载请自行联系原作者




相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
9月前
|
Go
Limit Concurrency你真的会吗
Limit Concurrency你真的会吗
|
9月前
|
SQL 关系型数据库 MySQL
Lock wait timeout exceeded; try restarting transaction解决方案
在测试程序时,打的断点怎么都跳不进去,console一直报 “Lock wait timeout exceeded; try restarting transaction”
290 0
|
9月前
|
缓存 Go
译 | Concurrency is not Parallelism(四)
译 | Concurrency is not Parallelism
34 0
|
9月前
|
负载均衡 安全 Go
译 | Concurrency is not Parallelism(三)
译 | Concurrency is not Parallelism(三)
32 0
|
9月前
|
程序员 Linux Go
译 | Concurrency is not Parallelism(一)
译 | Concurrency is not Parallelism
38 0
|
9月前
|
算法 安全 Shell
译 | Concurrency is not Parallelism(二)
译 | Concurrency is not Parallelism(二)
34 0
|
算法 机器人 决策智能
[CNKI有什么?] Adaptive Control (3)
CNKI作为中文文献库其首页推荐内否给读者带来启迪?从今天开始,我们走进CNKI的 Adaptive Control 首页20篇中的两个应用文章。
112 0
[CNKI有什么?] Adaptive Control (3)
|
分布式计算 机器人 决策智能
[CNKI有什么?] Adaptive Control (1)
CNKI作为中文文献库其首页推荐内否给读者带来启迪?从今天开始,我们走进CNKI的 Adaptive Control 首页20篇。
148 0
|
机器人 算法框架/工具 决策智能
[CNKI有什么?] Adaptive Control (2)
CNKI作为中文文献库其首页推荐内否给读者带来启迪?从今天开始,我们走进CNKI的 Adaptive Control 首页20篇的第二篇。
114 0
Timeout waiting to lock artifact cache ....
Timeout waiting to lock artifact cache ....
Timeout waiting to lock artifact cache ....