我在存储过程中有一条 SELECT 语句,在非常重的负载下会导致超时:“超出锁定请求超时期限。” - 至少 .NET 是这样抛出的。这是对具有主键和聚集索引(在 TYPE_CODE1 上)的表 (CODES) 的非常简单的查询。唯一看起来不寻常的是有很多字段被选中(除了 Dclass 之外的所有字段都是位字段)。这会导致表被锁吗?还有其他想法吗?
TIA
select
@TYPE_CODE1 = TYPE_CODE1,
@ALTERNATE_CODE = ALTERNATE_CODE,
@BANNER = BANNER,
@CODE_1 = CODE_1,
@CODE_2 = CODE_2,
@CODE_3 = CODE_3,
@CODE_4 = CODE_4,
from CODES with (nolock)
where
Dclass = @Dclass
and Ret = @Ret
and Rem = @Rem
and Ope = @Ope
and Res = @Res
and Cer = @Cer
and Cdo = @Cdo
and Del = @Del
and Sig = @Sig
and Ads = @Ads
and Adr = @Adr
and Emi = @Emi
and In1 = @In1
and In2 = @In2
and Paa = @Paa
and Reg = @Reg
and Red = @Red
and Rer = @Rer
and Ree = @Ree
and Rei = @Rei
and Spe = @Spe
and Mer = @Mer
and Hol = @Hol
and Day = @Day
and Sca = @Sca
and Sis = @Sis
and Poa = @Poa
and Haz = @Haz
and Sun = @Sun
and Out = @Out
and IsActive = 1
最佳答案
超出锁定请求超时
并不总是与表锁直接相关。该错误意味着查询正在等待获取 SQL Server 中某个对象的锁,但速度不够快,因此查询超时。
此外,SQL 使用称为“锁升级”的过程,如果查询需要超过 5000 个锁(页/行级锁),它将请求全表锁。如果您达到了 5000 个锁阈值并尝试取消表锁定,则它可能会卡在已经锁定的其他进程后面。
我会尝试运行您的应用程序,然后同时在 Management Studio 中使用 sp_Whoisactive 等工具,找出是什么阻止了您的应用程序并导致其超时。可能有其他进程锁定了您尝试查询的表。
关于sql-server - 选择太多字段会导致表锁定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30576696/