sql-server - SQL Server - 聚集索引死锁
问题描述
我有一个表 A,主键上有一个聚集索引,第二列有一个非聚集索引(act_id)(表 B 的外键)
两个更新语句正在生成以下死锁: 死锁 1
这个死锁似乎不是书签查找死锁,因为它在同一个索引和同一个 objid 上。在非聚集索引中包含 pk 并没有带来任何成功。我确实明白,objid 不是recordid,而是索引中的一个范围。
导致此死锁的查询(例如更新 set act_id = 1 where act_id = 2)具有以下执行计划: 执行计划
有时同一个死锁在另一个只有一个聚集索引的表上:同一个死锁在另一个表上
有谁知道如何避免这种僵局?
解决方案
这两个查询似乎都在更新聚集索引的 B 树的同一部分。这个并发问题有多种答案。一种是获得更快的硬件。另一个是没有可以更改的主键。
我首先要问你:你是从 2 个单独的查询中更新你的主键吗?
你有天然钥匙吗?
您是否在主键/外键上设置了级联更新?
您的其他阻止查询是什么?
在非聚集索引中包含pk并没有带来任何成功
那是因为 pk 总是在所有非聚集索引中,否则它会如何进行书签查找?
推荐阅读
- sql-server - 如何使用varchar数据类型的partitionColumn读取scala spark上的表?
- html - 背景图像不适用于 Firefox 48 以上版本和其他浏览器中的选择选项
- angular - Angular Material Select 在选项字段中显示函数名称
- android - 如何在应用程序的 Android 代码中创建主题
- python - django“only()”方法似乎不能正常工作
- r - R中的检查点更新问题
- permissions - 如何授予其他人在 BigQuery 中阅读我的 INFORMATION_SCHEMA.SCHEMATA 的权限?
- kubernetes - Kubernetes Pod (Plex) 上的连接被拒绝
- javascript - 之间的区别??和 ||
- swift - 当抛出 optional-nil 错误时,如何获取使用的默认错误字符串?