我有一个产生锁的特定选择。我正在使用探查器跟踪它们。
这是探查器所说的:
Lock:Acquired <no textdata> OBJECTID:57576312
Lock:Acquired 1:515848
Lock:Acquired (59855d342c69)
Lock:Released (59855d342c69)
Lock:Released 1:515848
那么sp_locks(和sys.dm_tran_locks)告诉我什么:
7 357576312 0 TAB IX GRANT
7 357576312 1 PAG 1:515848 IU GRANT
7 357576312 1 KEY (59855d342c69) U GRANT
那么谁是对的?一个告诉我锁已释放,另一个告诉我锁已被持有。
我有点困惑;-P
//编辑 请使用以下代码重现此行为:
-- create tables
ALTER DATABASE <insert database name here> SET READ_COMMITTED_SNAPSHOT ON
CREATE TABLE [dbo].Bla (
id int PRIMARY KEY
)
CREATE TABLE [dbo].BlaDetails (
Id int Identity(1,1) PRIMARY KEY,
BlaId int NOT NULL,
FOREIGN KEY (BlaId) REFERENCES Bla(id)
)
-- insert data
insert into bla(id) values(1)
insert into bladetails(blaid) values(1)
现在打开分析器,跟踪Lock:Acquired,Lock:Released。并使用以下代码打开新连接:
begin tran
set transaction isolation level read committed
select * from bla with(UPDLOCK) inner join bladetails d on bla.id = d.blaId where bla.id = 1
sp_lock @@spid
最好的问候,约瑟夫