SQl Server仍然收到“超时已过期。超时时间已过”的错误

时间:2012-01-16 21:49:12

标签: sql-server sql-server-2008 tsql

我以为我在帖子here中发现了一个sql错误... ...(错误消息:超时已到期。在操作完成之前超时时间已过,或者服务器没有响应。 “)我正在尝试使用visual studio中的数据库工具运行...而不是管理工作室,而不是通过客户端代码/ ADO(还)。我重写了一个使用几个自定义函数的相当简单的查询...函数以及查询的各个部分都已经过测试,并且运行良好,但是下面的查询超时...这确实与Management Studio中的输入完全相同,大约需要4分钟。正如我在其他帖子中提到的那样,我根据工具>选项>设计师>“覆盖连接字符串超时值”将设置更改为120秒,但是......它在30秒后仍然超时。在最新版本中添加ISNULL是让它在管理工作室中运行的变化。

SELECT Symbol, LatestDate
FROM (SELECT Symbol, ISNULL(dbo.LatestDateInDailyPricingVolBySymbol(Symbol), '1/1/1900') AS LatestDate FROM tblSymbolsMain) AS T2
WHERE (LatestDate < dbo.RecentTradingDateByNumber(3))

一般的想法是在我的每日定价表中至少返回3天没有相应数据点的股票代码子集。任何接受者?谢谢大家。

4 个答案:

答案 0 :(得分:10)

不考虑你的超时;

您使用sql管理控制台运行查询吗?如果是这样,当连接到数据库时,有一个选项按钮,允许用户设置超时。

Connection Options

此外,如果在查询窗口中,右键单击并选择“查询选项....”。

0,意味着无限制,我会检查这些。 4分钟是很长一段时间,也许查询可以重构运行得更快?

enter image description here

如果您通过C#在Visual Studio内部运行此命令,则默认命令超时为30秒。通过设置命令超时来改变它:

SqlCommand comm= new SqlCommand();
comm.CommandTimeout = 300;

答案 1 :(得分:2)

如果查询需要很长时间,那么可能是错误的。我会声明一个变量来存储RecentTradingDateByNumber。所以它看起来像这样:

DECLARE @RecentTrandingDateByNumber DATETIME
SET @RecentTrandingDateByNumber=dbo.RecentTradingDateByNumber(3)

SELECT 
    tblSymbolsMain.Symbol, 
    MAX(tblSymbolsMain.TradeDate)
FROM 
    tblSymbolsMain
GROUP BY 
    Symbol
HAVING 
    MAX(TradeDate) < @RecentTrandingDateByNumber

要查看管理工作室中的执行,请转到“查询/包含实际执行计划”。 如果您还想查看查询的流量,则选择等的数量。您还可以包括客户端统计信息。 “查询/包含客户统计信息”

如果您想了解有关检查查询执行的更多信息,请参阅 here

答案 2 :(得分:1)

我担心你的日常工作需要4分钟。这似乎是一个非常简单的查询,假设函数执行它们似乎做的事情,并且通过索引和适当的表设计,它应该比这更快地返回。

您是否查看了此查询的执行计划:

SELECT Symbol, MAX(TradeDate)
FROM tblSymbolsMain
GROUP BY Symbol
HAVING MAX(TradeDate) < dbo.RecentTradingDateByNumber(3)

当在具有大量行的集合上重复调用时,标量函数可能会出现性能问题,并且还会损害sargability。

答案 3 :(得分:0)

有时候我会超时。但有时它会在几秒钟内执行。 每当我更改数据类型时遇到超时错误,都不建议这样做。

例如如果您的查询具有条件datetime。将数据类型更改为公正日期。其他选项是日期数据类型到日期时间数据类型。我知道这不是正确的方法。但这对我有用