相关疑难解决方法(0)

SQL Server 2005 deadlock with nonclustered index

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)

sql-server deadlock sql-server-2005

10
推荐指数
1
解决办法
9472
查看次数

sql server 2008两个并行事务中的死锁

我有两个事务: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'; …

sql database sql-server deadlock

5
推荐指数
2
解决办法
3110
查看次数

标签 统计

deadlock ×2

sql-server ×2

database ×1

sql ×1

sql-server-2005 ×1