我想知道哪种并发控制更有效,悲观或乐观的并发控制? SQL Server 2005使用悲观并发控制作为默认值有特殊原因吗?这是出于与性能相关的原因吗?
感谢您的期待
答案 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