如何调试 SQL Server 2008 R2 中的死锁?

gri*_*yvp 6 deadlock sql-server-2008-r2 debugging

我正在使用 SQL Server 2008 R2,它根据我的查询自动锁定数据库项目。

有时这种死锁 - 具有不同查询的两个线程永远不会结束。

有什么方法可以调试 SQL Server 如何锁定和解锁资源?我尝试过 SQL Trace,但它没有关于资源锁的信息。

Roj*_*mas 8

“有时这种死锁 - 具有不同查询的两个线程永远不会结束”

您遇到的是阻塞,而不是死锁。当发生死锁情况时,SQL Server 会自动检测它并选择其中一个查询作为受害者并抛出错误 1205。

如果您确实遇到死锁错误,请打开跟踪标志 1222。它会将死锁错误记录到 SQL 服务器日志中。

如果您遇到阻塞,请配置“阻塞进程阈值”(http://msdn.microsoft.com/en-us/library/ms181150(v=SQL.90).aspx

另见http://www.mssqltips.com/sqlservertip/2429/how-to-identify-blocking-in-sql-server-2005-and-2008/