sql-server - SQL事务死锁

标签 sql-server exception stored-procedures triggers

有时我会在不太繁忙的 SQL 服务器上遇到这种异常:

Transaction (Process ID 57) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Line number: 1
Error Number: 1205
Procedure: 
Server name: P01
Error Source: .Net SqlClient Data Provider
Error State: 47

我无法重现它。我尝试同时运行来自不同客户端的多个查询,但它没有显示。 当这种问题发生在过程或触发器内部时,处理此类问题的最佳方法是什么?我的意思是,如何重新运行事务?

当从触发器调用的过程内部发生异常时如何处理,该过程是由某个过程的插入调用的(即: procedure01 -> insert -> trigger -> procedure02 !)

最佳答案

我建议你从两个角度来看待这个问题。

  1. Trap or Catch 死锁错误,以便您可以重新运行被 SQL Server 数据库引擎选为死锁受害者的事务。

  2. 找出导致死锁事件的原因。 您可以通过以下两种方式之一执行此操作:运行 SQL Server Profiler Trace 来捕获并记录死锁事件,或者启用某些 SQL Server Trace Flags它将把死锁事件的详细信息记录到 SQL Server 错误日志中。

绝大多数情况下,您可以确定死锁事件的原因,并通过数据库架构中的结构更改或对涉及/负责的代码进行逻辑更改来补救这种情况死锁事件。

要进一步阅读,请查看:

希望我已经回答了您的问题,但如果我可以以任何方式进一步帮助您,请告诉我。

关于sql-server - SQL事务死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5389261/

相关文章:

sql-server - 如何找到连接字符串的 ODBC 驱动程序名称?

java - 反序列化时出现异常

c# - 只通过存储过程查询数据库是不是一种好方法?

c# - 如何对远程存储过程进行单元测试

c# - 如何在 C# Web 应用程序中连接到数据库

sql - 具有最大限制的运行总计

java - 使用 MSSQL 的 Hibernate joined-subclass 死锁

python - 无法通过用户输入引发异常

java - 调试时强制异常

mysql - 在一组字符串上添加一些字符串