sql-server - 选择太多字段会导致表锁定吗?

标签 sql-server database scalability

我在存储过程中有一条 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/

相关文章:

mysql - 我们究竟如何才能为**在所有分片上运行**的应用程序提供无缝的自动 key 生成方法?

sql - T-SQL确定 "out of sequence"记录

jakarta-ee - 将 JavaEE 应用程序扩展到 1.000.000 个并发用户

mysql - 如何使用 ruby​​ on Rails 配置 cassandra 以及使用哪个 ORM?

c# - 如何获取 Sql Server 数据库中所有模式的列表

sql-server - SQL Server : Null VS Empty String

php - json_decode 返回 NULL [{},{}]

sqlite 选择查询

mysql - 如何在两个表上进行选择,然后在 mySQL 中将它们连接起来

mysql - 包含相关数据的非常大的表。什么样的 DBMS 是最佳的,以及如何对其建模?