【问题标题】:Can SQL Server detect deadlocks involving joins with linked databases?SQL Server 可以检测到涉及与链接数据库连接的死锁吗?
【发布时间】:2016-06-22 16:35:56
【问题描述】:

我的查询代码如下所示:

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

【问题讨论】:

    标签: sql-server sql-server-2008 sql-server-2012 database-deadlocks


    【解决方案1】:

    根据我的理解,两个不同表之间的死锁只有在服务器级别的资源不足时才会发生,您是否试图了解插入和选择查询之间的死锁。然后是的,假设您正在向 Linkedservers 中的表中插入一些记录,同时您正在使用 Linkedservers 中的数据选择 localDB 中的数据,但是由于插入尚未完成,这可能会导致您的子查询阻塞它试图从 Linkedserver 获取数据并将数据传递给 localDB 选择查询。在这种情况下,阻塞将是因为 Table1 仅属于linkedserver,但从我们的角度来看,table2 似乎被 table1 阻塞,但实际上并非如此。是的,当然死锁信息将在我解释的情况下可用,但这些信息将在链接服务器的 DMV 中可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 1970-01-01
      • 2021-09-21
      • 2011-09-01
      • 2019-03-29
      • 1970-01-01
      • 2013-07-08
      相关资源
      最近更新 更多