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

Sql server SQl Server仍收到错误“超时已过期。超时时间已过”,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,我想我刚才在一篇帖子中发现了一个sql错误。。。错误消息:超时已过期。操作完成前已过超时时间,或者服务器没有响应。我正在尝试使用visual studio中的数据库工具运行此程序。。。不是management studio,也不是通过客户端代码/ADO。我重写了一个相当简单的查询,它使用了两个自定义函数。。。这些函数以及查询的各个部分都已经过测试,并且都运行良好,但是下面的查询超时了。。这与ManagementStudio中键入的内容完全相同,大约需要4分钟。正如我在另一篇文章中提到的,根据这篇

我想我刚才在一篇帖子中发现了一个sql错误。。。错误消息:超时已过期。操作完成前已过超时时间,或者服务器没有响应。我正在尝试使用visual studio中的数据库工具运行此程序。。。不是management studio,也不是通过客户端代码/ADO。我重写了一个相当简单的查询,它使用了两个自定义函数。。。这些函数以及查询的各个部分都已经过测试,并且都运行良好,但是下面的查询超时了。。这与ManagementStudio中键入的内容完全相同,大约需要4分钟。正如我在另一篇文章中提到的,根据这篇文章,我将工具>选项>设计器>覆盖连接字符串超时值下的设置更改为120秒,但是。。。30秒后仍会超时。在这个最新版本中添加ISNULL是使它在ManagementStudio中运行的更改

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分钟才能开始。这似乎是一个非常简单的查询,假设函数执行它们似乎执行的操作,并且通过索引和适当的表设计,它应该返回得更快

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

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

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

不考虑超时

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

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

0,表示无限制,我会检查这些。4分钟是很长的时间,也许可以重构查询以更快地运行

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

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

如果一个查询需要那么长的时间,那么它可能是出了问题。我将声明一个变量来存储RecentTradingDateByNumber。看起来是这样的:

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

SELECT 
    tblSymbolsMain.Symbol, 
    MAX(tblSymbolsMain.TradeDate)
FROM 
    tblSymbolsMain
GROUP BY 
    Symbol
HAVING 
    MAX(TradeDate) < @RecentTrandingDateByNumber
要查看management studio中的执行情况,请转到查询/包含实际执行计划。 如果您还想查看查询的流量、select的编号等,还可以包括客户端统计信息。查询/包括客户统计信息

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

有时我会休息。但有时它会在几秒钟内执行。 这是不可取的一个每当得到超时错误我一直在改变数据类型


例如,如果您的查询有datetime条件。将数据类型更改为“仅日期”。另一个选项是日期数据类型到日期时间数据类型。我知道这不是正确的方法。但是它对我很有用

谢谢你的回复。它看起来确实很长!我还没有看过我的执行计划。。。我不知道怎么做。我的想法是让它成为一个可以设置函数值的存储过程:dbo.RecentTradingDateByNumber3只设置一次,但我不知道细微的更改会让它保持一致。如果您有进一步的推动,我洗耳恭听。@StatsViaCsh在ManagementStudio中,有一个菜单选项用于查看执行计划。有一本免费电子书,它会告诉你如何理解一个糟糕的执行计划是什么样子:正如我所说,它在ManagementStudio中运行,但需要一段时间。。。我正试图使用visual studio 2010中的sql工具运行它。@StatsViaCsh-必须是VS2010中类似于sql Server管理控制台的设置。如果生成了代码,则可以通过代码对其进行调整,但可能右键单击查询屏幕,或者在某个地方单击选项?很抱歉,我不使用VS2010运行查询,只使用SQL Server管理控制台,因此我不熟悉这些屏幕。@StatsViaCsh-查看了一下VS2010,我可以设置连接超时,但找不到命令超时。我会尝试使用代码而不是使用该工具,它看起来使用的是无法轻松更改的默认值。谢谢。。。直到您的建议,我才开始寻找它,但是在VisualStudio中的“工具”>“选项”>“数据库工具”下有一组选项。我换了它,它就跑了。。在将近五分钟的过程中!:现在就可以了。