SQL Server中的死锁是什么?它何时出现?

僵局有哪些问题?如何解决?

推荐答案

通常,死锁意味着两个或更多实体阻塞某些源,并且没有一个实体能够完成,因为它们以循环的方式阻塞源.

举个例子:假设我有表A和表B,我需要在A中进行一些更新,然后B决定在使用时锁定这两个表(这是非常愚蠢的行为,但现在它起到了应有的作用).在同一时刻,另一个人以相反的顺序做同样的事情--先锁定B,然后锁定A.

按照时间顺序,这种情况会发生:

进程1:锁定A

进程2:锁定B

proc1:Lock B-开始等待,直到proc2释放B

proc2:Lock A-开始等待,直到proc1释放A

他们两个都不会完成的.这是一个僵局.在实践中,这通常会导致超时错误,因为不希望任何查询永远挂起,并且底层系统(例如数据库)将终止未及时完成的查询.

一个现实世界中的死锁例子是,当你把家里的 keys 锁在车里,而车 keys 锁在家里.

Database相关问答推荐

如何在保持相同 Flyway 校验和的同时更正语法?

从仅连接器电源查询制作图表

创建一个spell check,判断具有合理运行时间的数据库

分布式数据库管理系统 (DDBMS) 中的水平与垂直碎片

用于存储食谱的数据库设计

如何将 PHP 会话数据保存到数据库而不是文件系统中?

只用一个 save() 插入多行

为什么null不等于null false

Spring Boot:如何使用多个模式并在运行时动态 Select 使用哪一个

区分大小写的数据库有什么好处吗?

如何避免使用 LINQ-To-SQL 的内存泄漏?

Oracle 和 SQL Server 中的 NVARCHAR 之间的区别?

怎样有效存储 7.300.000.000 行?

Meteor 如何执行数据库迁移?

customer客户表的数据库 struct ,每个客户有很多订单,每个订单有很多商品

使用 typeORM 搜索早于日期的数据

表模块与域模型

在数据库中存储业务逻辑

Hibernate hbm2ddl.auto 默认值

LevelDB 支持 java 吗?