我的代码包含如下查询:
INSERT INTO LinkedServer.DB.dbo.Table1 (column)
SELECT something
FROM LocalDB.dbo.Table2
WHERE something NOT IN (SELECT column FROM LinkedServer.DB.dbo.Table1)
生态系统中有很多其他代码可能会触及这些表格。今天,这个SQL代码挂起的时间比我预期的要长。如果Table1和Table2之间存在死锁,SQL Server是否可以检测到它是否是链接服务器?
此外,如果LocalDB只调用LinkedServer而不锁定任何自己的对象,该怎么办?如果受影响的对象都在远程服务器上,它是否可以检测到死锁。
在这种情况下,LocalDB是2012 R2,LinkedServer是2008
答案 0 :(得分:0)
根据我的理解,只有当服务器级别的资源不足时才会发生两个不同表之间的死锁,您是否正在尝试理解插入和选择查询之间的死锁。那么是的,假设您正在将一些记录插入到Linkedservers中的表中,同时您使用Linkedservers中的数据在localDB中选择数据,但是由于插入尚未完成,可能会导致阻塞您的子查询它试图从Linkedserver获取数据并将数据传递给localDB选择查询。在这种情况下,阻塞将是因为Table1只是链接服务器,但从我们的观点来看,它看起来像table2被table1阻止但实际上不是这种情况。当然,在我解释的情况下,死锁信息将可用,但这些信息将在链接服务器的DMV中提供。