sql - 零 SQL 死锁设计 - 有编码模式吗?

标签 sql sql-server design-patterns deadlock

我在 MS SQL Server 2005 之上运行的 .NET 2.0 Web 应用程序上遇到了非常罕见但烦人的 SQL 死锁。过去,我们一直以非常经验的方式处理 SQL 死锁 - 基本上是调整查询,直到它有效。

然而,我发现这种方法非常不令人满意:耗时且不可靠。我非常愿意遵循确定性查询模式,以确保通过设计永远不会遇到 SQL 死锁。

例如,在 C# 多线程编程中,一个简单的设计规则(例如必须按照其字典顺序获取锁)可确保永远不会发生死锁。 p>

有没有保证不会出现死锁的 SQL 编码模式?

最佳答案

编写防死锁代码确实很困难。即使您以相同的顺序访问表,您仍然可能会遇到死锁 [1]。我写了a post on my blog其中详细阐述了一些可以帮助您避免和解决僵局情况的方法。

如果您想确保两个语句/事务永远不会死锁,您可以通过使用 sp_lock 系统存储过程观察每个语句消耗哪些锁来实现它。要做到这一点,您必须非常快,或者使用带有保持锁提示的开放事务。

<小时/>

注释:

  1. 任何同时需要多个锁的 SELECT 语句都可能对以相反顺序获取锁的智能设计事务造成死锁。

关于sql - 零 SQL 死锁设计 - 有编码模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/111707/

相关文章:

mysql - mysql连接三张表

sql - 调整SQL Query强制一条记录先出现?

mysql - SQL查询获取列值的次数和持续时间达到序列中的特定值

sql - 删除表中所有在另一个表中没有引用的记录

sql - 查找所有具有 X 列名称的表

c# - 字符串或二进制数据将在 Varbinary(MAX) 中被截断

sql-server - 可以隐藏 SQL Server Management Studio 数据库图表中的列吗?

c# - 在 ASP.NET Core 中全局重用变量

c++ - 虚拟继承的其他替代方案?

java - 需要合适的安卓模式