SQL事件探查器显示错误的锁

时间:2018-07-23 13:29:40

标签: sql sql-server locks sql-server-profiler

我有一个产生锁的特定选择。我正在使用探查器跟踪它们。
这是探查器所说的:

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

最好的问候,约瑟夫

0 个答案:

没有答案