快捷搜索:  as  1111

并发控制机制Optimistic concurrency control(乐观锁)和

(一)为什么必要并发节制机制

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

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_sessionswhere session_id = @@SPID

或者

DBCC useroptions

您可能还会对下面的文章感兴趣: