从C#.NET SQL服务器超时2000(SQL server timeout 2000 from

2019-10-19 04:34发布

我遇到了使用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连接时出现。

Answer 1:

有几件事情进行调查; 第一是SET选择; 这些可以使某些查询的巨大差异。 看看SET在跟踪选项,并重复这些,当你在Management Studio(或查询分析器)测试。 请注意,你必须看一下实际的轮廓会真正看到这些(不只是你的代码日志)。

接下来的事情我想看看是交易; 什么样的交易模式是你在C#中使用? 任何? 没有? 什么隔离? 序列化? 也许分配? 这可能是有被,表上持有一些模糊的锁。

当然,如果锁定是一个问题,你可能会看到一些通过sp_who / sp_who2查询运行时。



文章来源: SQL server timeout 2000 from C# .NET