我遇到了使用SQL Server 2000和两个链接的服务器一个奇怪的问题。 两年来我们的解决方案已运行顺利,但昨天突然查询从数据库到其他的一个数据同步启动超时。
我连接到在生产网络的服务器,其被连接到包含服务器的订单我需要从数据。
查询中包含了几个连接,但基本上这个概括什么做:
INSERT INTO ProductionDataCache
(column1, column2, ...)
SELECT tab1.column1, tab1.column2, tab2.column1, tab3.column1 ...
FROM linkedserver.database.dbo.Table1 AS tab1
JOIN linkedserver.database.dbo.Table2 AS tab2 ON (...)
JOIN linkedserver.database.dbo.Tabl32 AS tab3 ON (...)
...
WHERE tab1.productionOrderId = @id
ORDER BY ...
显然,我的第一个解决这个问题的尝试是从原来的5分钟延长超时限制。 但是,当我到达30分钟,仍然有一个超时,我开始怀疑别的东西是怎么回事。 查询只是没有在不到5分钟到30分钟在夜间执行去。
我输出的SQL查询(这原本是在C#代码)我的日志,并决定直接在数据库服务器上执行的查询分析器查询。 为了我的大惊喜,查询在不到10秒的正确执行。
所以我隔离在一个简单的测试程序的SQL执行,并观察到同样的查询超时都在数据库服务器上本地运行时服务器最初运行该解决方案及。 此外,我试图创建一个存储过程,并从程序执行此,而是出于这也倍。 在查询分析器中运行它的工作原理,在不到几秒钟的罚款。
看来,当我执行从C#程序此查询的问题只发生。 有没有人见过这样的行为,并为它找到一个解决方案?
更新:我现在已经在服务器上使用SQL事件探查器。 最明显的区别是,在执行从.NET程序查询时,它在日志中显示了“EXEC sp_executesql的N'INSERT INTO ...'”,但查询分析器中执行时,它发生是由于在日志中正常查询。
而且我尝试使用相同的SQL用户的程序来连接SQL查询分析器,这引发了查询分析器中的问题,以及。 所以似乎只有问题使用SQL用户通过TCP / IP连接时出现。