Can anybody help me for a deadlock in SQL Server 2005?
For a simple test, I have a table "Book" which has a primary key (id), and a column name. The default index of this primary key is nonclustered.
当两个会话同时运行时发生死锁.活动监视器显示第一个会话"//步骤1"使用X锁定锁定行(摆脱锁定).第二个会话保持行U锁定和键U锁定.死锁图片显示第一个会话的"// step2"需要密钥U锁定.
如果索引是群集的,则在这种情况下没有死锁."// step 1"将同时保持行和键锁定,因此没有问题.我可以理解锁定一行也会锁定索引,因为聚簇索引的叶节点是行数据.
但是,为什么非聚集索引就是这样呢?如果第二个会话持有密钥U锁,为什么第一个会话的"步骤1"不保持此锁定,因为它们与更新语句相同.
--// first session
BEGIN TRAN
update Book set name = name where id = 1 //step 1
WaitFor Delay '00:00:20'
update Book set name = 'trans' where id = 1 …Run Code Online (Sandbox Code Playgroud) 我有两个事务:T1与SERIALIZABLE隔离级别和T2(我认为 - 默认READ COMMITTED隔离级别,但没关系).
SELECT然后事务T1执行WAITFOR2秒SELECT.
事务T2 UPDATE对T1读取的数据执行.
它导致死锁,为什么事务T2不等待T1的结束?
当T1具有REPEATABLE READ隔离级别时,一切正常,即出现幻像行.我想当我提高隔离级别时SERIALIZABLE,T2将等待T1的结束.
这是我大学练习的一部分.我必须在两个并行事务中显示负面影响,这些事务具有不正确的隔离级别,并且缺少具有正确隔离级别的这些影响
这是代码,不幸的是字段的名称是波兰语.
T1:
USE MR;
SET IMPLICIT_TRANSACTIONS OFF;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
-- 1. zapytanie
SELECT
www.IdSamochodu, s.Model, s.Marka, s.NrRejestracyjny, o.PESEL, o.Nazwisko, o.Imie, o.NrTelefonu
FROM
WizytyWWarsztacie www
JOIN
Samochody s
ON s.IdSamochodu = www.IdSamochodu
JOIN
Osoby o
ON o.PESEL = s.PESEL
WHERE
www.[Status] = 'gotowy_do_odbioru'
ORDER BY www.IdSamochodu ASC
;
WAITFOR DELAY '00:00:02'; …