我正在使用 SQL Server 2008 R2,它会根据我的查询自动锁定数据库项目。
有时这种死锁 - 具有不同查询的两个线程永远不会结束。
有什么方法可以调试 SQL Server 如何锁定和解锁资源?我试过 SQL Trace,但它没有关于资源锁的信息。
我正在使用 SQL Server 2008 R2,它会根据我的查询自动锁定数据库项目。
有时这种死锁 - 具有不同查询的两个线程永远不会结束。
有什么方法可以调试 SQL Server 如何锁定和解锁资源?我试过 SQL Trace,但它没有关于资源锁的信息。
“有时这种死锁 - 具有不同查询的两个线程永远不会结束”
您正在经历的是阻塞,而不是死锁。当发生死锁情况时,SQL Server 会自动检测到它并选择其中一个查询作为牺牲品并抛出错误 1205。
如果您确实遇到死锁错误,请打开跟踪标志 1222。它会将死锁错误记录到 SQL Server 日志中。
如果您遇到阻塞,请配置“阻塞进程阈值”(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/
您应该能够使用 SQL Profiler 查看它们。
请参阅此链接 http://msdn.microsoft.com/en-us/library/ms178104(v=sql.105).aspx
此外,如果您怀疑某个查询导致您的死锁,您可以尝试添加“WITH NO LOCK”子句。但这不应该是一个永久的解决方案。
最终,您应该采用不同的查询并查看它们导致锁定的原因。也许他们可以用不同的方式写?还是优化?或者数据库结构可能是原因?