首页 > 解决方案 > SQL 探查器显示错误的锁

问题描述

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

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

最好的问候,约瑟夫

标签: sqlsql-serverlockssql-server-profiler

解决方案


推荐阅读