我有一个日常运行SP的预定作业(SQL Server 2005)。最近我经常遇到这个SP的死锁问题。以下是错误消息:
Message
Executed as user: dbo. Transaction (Process ID 56) was deadlocked on thread |
communication buffer resources with another process and has been chosen as the deadlock
victim. Rerun the transaction. [SQLSTATE 40001] (Error 1205). The step failed.
SP对某些表使用了一些相互连接的视图,其中一个是具有数百万行数据的大型数据表(并且不断增长)。我不确定对表的任何作业或查询是否会导致SP无法访问该表?我将使用query调查谁在线。这可能会在此期间暴露SQL服务器上的某些查询或人员。
不确定是否有任何人有类似的问题或者这是已知的SQL 2005问题?我应该在我的SP或SQL服务器上执行哪些其他方法来避免死锁?
答案 0 :(得分:1)
使用SQL Server Profiler跟踪正在运行的所有查询。我把输出放到SQL Server中。这将帮助您确定哪些是访问您的特定表/表。发布您的发现,我们可以帮助您。
答案 1 :(得分:1)
死锁是指两个事务分别持有某些资源并且想要一个资源而另一个资源也是如此 - 两者都不能继续,因为它们都在等待彼此。它们不能完全消除,但可以做很多事情来减轻它们。 Remus和Raj建议在Profiler中捕获更多关于它们的信息 - 我也建议 - 通常优化你的查询(如果你知道哪些涉及)也可以提供帮助。以下是MSDN文章,可以帮助您:“Minimizing Deadlocks”。