sql - 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
最好的问候,约瑟夫
解决方案
推荐阅读
- android - 带有 RecyclerView 和其他视图的 BottomSheet
- java - 调用改造没有价值
- hadoop - Namenode没有格式化就无法启动
- c# - 如何在 WPF 中使用 Helix 工具包 MeshBuilder 创建拉伸几何体?
- java - Fragment之间如何共享公共资源?
- android - Android NDK 和 CMake - 如何使用 CMake 生成 Makefile,该 Makefile 将使用他们提供的 .mk 文件构建第三方 .so
- swift - UIView 实时复制另一个视图的 CAAnimation?
- javascript - 使用 JavaScript 删除 iframe 中的 HTML 元素
- java - 从 Spark Java API 中的参数类型创建 DataType
- jquery - 不想在 jQuery 中多次对按钮执行操作?