哪种并发控制是更有效的悲观或乐观并发控制

时间:2011-06-23 19:15:30

标签: sql-server concurrency

我想知道哪种并发控制更有效,悲观或乐观的并发控制? SQL Server 2005使用悲观并发控制作为默认值有特殊原因吗?这是出于与性能相关的原因吗?

感谢您的期待

2 个答案:

答案 0 :(得分:2)

这完全取决于应用程序的并发需求。如果你正在开发一个OLTP应用程序,悲观可能是最好的...如果你正在开发一个单用户数据库,乐观就好了。

答案 1 :(得分:1)

我不确定你的意思是“SQL Server 2005使用悲观并发控制作为默认值”。 IMO SQL Server 2005为我们提供了允许我们自己实现乐观或悲观的工具。我在简单谈话上写了几个例子:Developing Modifications that Survive Concurrency

编辑:我不认为SQL Server的默认行为正是“悲观的并发控制”。让我们考虑以下简单示例,该示例在默认隔离级别READ COMMITTED:

下运行
-- Connection one

BEGIN TRANSACTION;

SELECT * FROM Schedule 
WHERE ScheduledTime BETWEEN '20110624 06:30:00' 
AND '20110624 11:30' ;

-- Connection two
UPDATE Schedule 
SET Priority = 'High'
WHERE ScheduledTime ='20110624 08:45:00'
-- nothing prevent this update from completing, 
-- so this is not exactly pessimistic

-- Connection one
DELETE FROM Schedule 
WHERE ScheduledTime ='20110624 08:45:00' ;
COMMIT ;
-- nothing prevents us from deleting 
-- the modified row
相关问题