首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据库未确认死锁t-sql 2005

数据库未确认死锁t-sql 2005
EN

Stack Overflow用户
提问于 2012-07-19 01:30:14
回答 2查看 81关注 0票数 0

例如,存在表A和表B,我需要在A中处理更新,然后B和我决定在使用期间对这两个表进行表锁(根据我的架构师的要求)。同时,另一个过程被调用,该过程先锁定B,然后锁定A。

这笔交易会完成吗?我有一种感觉,这是一个死锁,相当有把握,因为它没有释放任何资源…

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-19 01:41:09

是的,这是一个可能的死锁。

死锁场景是

您的任务锁定为

其他任务锁B

然后你的任务试图锁定B,但它不能,因为你拥有锁,而其他任务试图锁定A,但它不能,因为你拥有它。

因此,其中一个任务必须失败/回滚,这样另一个任务才能完成。根据所使用的RDBMS,数据库将选择其中之一进行终止。

通常,解决方案是一个指导原则,即您必须在所有进程中以相同的顺序锁定资源,通常这必须手动执行。

票数 1
EN

Stack Overflow用户

发布于 2012-07-25 02:16:33

是。这种方法将以一个典型的循环死锁结束,正如前面提到的here

使用表级锁进行更新是一种过度杀伤力。这样做背后的理由是什么?如果您有正确的索引,将在键级获取锁,这有助于多个进程并发访问相关的表。

不过,最好的做法是尽可能以相同的顺序访问表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11547041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档