超级易变表有哪些选项?

Ang*_*ker 5 sql-server deadlock sql-server-2016

我继承了一个非常不稳定的表,它是一个映射谁拥有系统中的资源。在任何给定的时刻,可能有十几个插入/删除/读取与该表相反。但是,系统中永远不会超过 30-40 行。

系统是SQL 2000时代写的,对表的访问是通过sp_getapplock/sp_releaseapplock系统sprocs序列化的,所以只有1个请求在修改表。此外,INSERT & DELETE 语句执行WITH (TABLOCK)。阅读十年前的笔记,它指出如果没有这些限制,系统将经历不间断的死锁。

我已将数据库移植到 SQL Server 2016 企业版。现在系统的吞吐量增加了 10 倍,这张表很容易成为最大的瓶颈。

对于像 SQL 2016 这样易变的表,我有哪些选择?

我正在寻找快速(希望是并发)访问并且没有死锁。

Sco*_*red 1

根据我的经验,Sql Server 有时想要扫描小表(即使它们具有您认为会使用的索引),这可能会导致热表上的死锁。

这可能是一个拼凑的解决方案,但我有这样的表,并且能够通过实际添加大量“虚假”行来“加宽”表并强制 Sql Server(优化器)进行查找而不是扫描来解决我的问题。我还不得不求助于使用 ROWLOCK 提示来解决死锁问题(您的情况可能会有所不同)