增加LINQ to SQL存储过程调用的超时

时间:2009-11-17 15:13:54

标签: linq-to-sql

我通过Linq-to-SQL调用存储过程。此存储过程只处理我已插入另一个表的数据。在大型数据集上,我收到超时异常:

"Timeout expired. The timeout period elapsed prior to completion of the operation
 or the server is not responding."

我无法做任何事情来加速存储过程 - 它只是将数据从一个表移动到另一个表。我并不特别想增加数据库连接字符串中的超时 - 这是唯一需要很长时间的事情。

这不是一个网络应用程序;从普通Windows服务中的后台线程调用存储过程。后台线程由WCF调用启动,客户端定期轮询后台线程的结果。

不幸的是,存储过程花费的时间太长,GetDataContext().spRunStoredProcedure()调用抛出TimeoutException,即使存储过程看起来运行正常。

我可以为此存储过程调用增加超时吗?或者有没有办法让存储过程返回“我还没死”,以防止连接超时?

2 个答案:

答案 0 :(得分:13)

在DataContext上,将.CommandTimeout属性设置为更高的秒值。 SQL Server的default为30秒,您可以将其设置为0以使其不会超时。

答案 1 :(得分:2)

因为它是关于移动数据的,并且因为它实际上需要很长时间才能超时:它是否可以成为将其从Web上移开并将其作为预定SQL作业的解决方案?

除此之外,确实没有无法优化的查询;特别是那些超时的人。增加超时不是一个很好的解决方案。即使将数据从一个表格移动到另一个表格,通常也会非常仓促。查看索引,如何选择数据,锁定和统计信息。在启用了执行计划的Management Studio中运行通常较长的查询,并查看负责大部分负载的内容(通常可以将其固定为一个或两个瓶颈因素)并查看是否有任何可以执行的操作关于他们。