数据库并发控制-死锁

作者:vkvi 来源:千一网络(原创) 日期:2009-7-27

产生死锁的原因

产生死锁的原因很多,举个例子:事务 T1 对数据 A 上了 X 锁,现在 T1 要读取数据 B;而另一方面,事务 T2 对数据 B 上了 X 锁,现在 T2 要读取数据 A。T1、T2 都需要对方已经锁定了的数据,相互等待对方释放,这就造成了死锁。

死锁的解决与避免

数据库管理系统(比如 SQL Server)识别到死锁后,会选择互锁的事务中的一个来作为牺牲品,回滚并结束该事务,并抛出一条消息。

现在的数据库管理系统都很优秀,死锁很少发生,但很少不代表不会发生,如果我们在事务中注意一下,又可以进一步减少死锁的发生。下面是 SQL Server 中避免死锁发生的建议:

  • 按同一顺序访问对象。比如上述示例中 T1 和 T2 都应先访问数据 A,后访问数据 B,而不是一个先访问数据 A,一个先访问数据 B。
  • 避免事务中的用户交互。比如事务中不要等待用户输入,因为这种交互可能造成事务执行时间变长,增大了与其他事务竞争资源的可能性。
  • 保持事务简短并在一个批处理中。
  • 使用低隔离级别。
  • 使用绑定连接。使用绑定连接使同一应用程序所打开的两个或多个连接可以相互合作。

你前面那位网友看了:用 ListView 实现多列列表

▲▲▲嘿,欢迎转载传播本站原创文章,尽量保留来源噢。▲▲▲

文章评论
赞助商们
vkvi
vkvi

作者简介: vkvi,致力于 .NET Web 开发、移动开发的技术推广,在 .NET、SQL Server、Windows Server 等方面有深入研究和丰富经验,10 年间共计撰写文章 4000 余篇。 主持金融、国土、农业、电商等多个行业项目执行, 推行“技术提升生产力、人心决定成功率”的管理理论。 联系他