SHR*_*SHR 1 sql-server deadlock nolock
我只有一张桌子Insert,Delete而且Select(没有Update)
在插入时,有时使用会话锁 ( WITH (TABLOCKX))
我有一个使用 ADO 的程序,它Select从表中使用RecordSet::Open命令打开一个简单的顺序查询。
喜欢:
Select * from t1 where id >= @from_id And >= @to_id`
Run Code Online (Sandbox Code Playgroud)
或者:
Select top(10) * from t1 where id >= @id Order by id
Run Code Online (Sandbox Code Playgroud)
id 列是一Identity列。
当我打开查询时,有时会陷入僵局。(表被Insert查询锁定,id 列的索引被 锁定Select)
我正在努力防止僵局。
我应该打开选择查询WITH(NOLOCK)吗?它可以防止死锁吗?
小智 5
一个更好的主意是启用快照隔离:https : //docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/snapshot-isolation-in-sql-server
这将使每个事务都有自己的数据快照,并且不会锁定或阻止其他事务。