LINQ to SQL中的Timeout expired SqlExceptions是什么原因引起的?

15

我的应用程序一直遇到超时过期的 SqlExceptions。问题是这个查询需要运行相当长的时间。我无法确定发生异常的位置。这是数据库服务器创建的超时,还是在我的程序中发生?或者如果可能是两者都有,我该如何确定是哪一个?

最后,我如何延长超时时间?

3个回答

15

增加超时时间 = 不好
修复查询语句 =

我不确定所有涉及的细节,但一般情况如下:

当查询运行缓慢时,在管理工具中执行以下操作:

  • 运行SET ShowPlan_All ON
  • 运行您的查询
  • 查看输出结果中的单词“scan”。您的问题就在那里。

"Scan"=触摸每一行(表格或索引)。您愿意在电话簿中“扫描”查找一个号码,还是使用索引?


3
我们已经尽可能地调整了查询。不幸的是,通过连接服务器从200万条记录的表中检索15000条记录的过程中,你能做的优化有限。 - Jason Baker
请编辑您的问题并包含 SET ShowPlan_All ON 的输出结果。 - KM.
1
@Jason Baker,我有很多查询涉及多个表,行数比你的200万还要多,但它们运行速度比30秒快得多。你说“我们已经尽可能地调整了查询”,这就是为什么我提供帮助的原因。 - KM.

10
很可能您的DataContext超过了设置的CommandTimeout。默认为30秒。
在执行查询之前,您只需要在DataContext上设置属性即可。

3
我该怎么做呢? - Johnny_D

3
这可能是因为默认超时时间为30秒。您可以通过在连接字符串上设置Timeout属性来更改此设置。或者,您可以在DataContext上设置此属性。
这里有一篇关于此问题的Code Project文章

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接