欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

SQL2008中SQL应用之- 死锁(Deadlocking)

程序员文章站 2022-04-26 16:16:47
...

当一个用户会话(会话1)已经落定了一个资源,而另一个会话(会话2)想要修改该资源,并且会话2也锁定了会话1想要修改的资源时,就会出现“死锁”(deadlocking)。

在另一方释放资源前,会话1和会话2都不可能继续。所以,SQL Server会选择死锁中的一个会话作为“死锁牺牲品”。

注意:死锁牺牲品的会话会被杀死,事务会被回滚。

注意:死锁与正常的是两个经常被混淆的概念。

发生死锁的一些原因:

1、应用程序以不同的次序访问表。例如会话1先更新了客户然后更新了订单,而会话2先更新了订单然后更新了客户。这就增加了死锁的可能性。

2、应用程序使用了长时间的事务,在一个事务中更新很多行或很多表。这样增加了行的“表面积”,从而导致死锁冲突。

3、在一些情况下,SQL Server发出了一些行锁,之后它又决定将其升级为表锁。如果这些行在相同的数据页面中,并且两个会话希望同时在相同的页面升级锁粒度,就会产生死锁。

相关标签: 死锁