【问题标题】:Stored procedure time out - but fine when run from SSMS存储过程超时 - 但从 SSMS 运行时很好
【发布时间】:2009-05-22 17:06:20
【问题描述】:

我有一个存储过程出错,显示“超时已过期”。

涉及的代码是ADO/VB6。

存储过程本身没有问题,可以在查询窗口中运行,不到一秒。

用于获取连接等的代码也是模块化的,并且在一个巨大的应用程序中使用。超时仅在这个地方发生,在一个特定的数据库上。

无论是否在调试中运行 VB6 代码,每次尝试数百次都会重现错误,然后突然间一切都会神奇地重新开始工作。然后在未来的某个时间,同样的问题会再次出现。

我不确定要放多少代码,这没什么复杂的;基本上是;

Set adoCommandObject.ActiveConnection = ...{open ADODB.Connection object}
Set rs = CreateObject("ADODB.Recordset")
Call rs.Open(adoCommandObject, , adOpenForwardOnly, adLockReadOnly)'Timeout occurs here

我一直在探查器中观察,但没有给出任何线索,除了偶尔看到在 sp 运行之前和之后发生的“SET NO_BROWSETABLE ON”/“SET NO_BROWSETABLE OFF”语句。

我已经在网上搜索过,但无法找到任何令人满意的帮助;我愿意在这一点上尝试任何事情(除了在 .NET 中重写,不幸的是这不是一个选项!)

【问题讨论】:

  • 几个问题:你是在很长一段时间后超时还是立即超时?如果是很长的时间,探查器是否同意命令的持续时间很长?
  • Get Timeout 在一段时间后过期 - 30 秒左右 - 我猜超时设置是什么,可能是默认设置。是的,探查器同意 - 在 VB6 代码中引发错误后,您会在探查器中看到 sp 完成,并注明持续时间长。
  • 您是否确定了解决方案,因为我处于类似情况!
  • 不是真的,我没有亲自参与,但我相信问题仍然偶尔会出现。似乎记得一个开发人员提到了一些关于“return”语句的内容/或者他们删除了一个“return 0”/添加了一个效果?值得一试。祝你好运-如果您找到解决方案,请发布。 PS类似;-)

标签: vb6 timeout ado


【解决方案1】:

我认为你想太多了。无意冒犯,但如果你使用 MSSQL,它就像有人打开查询窗口一样简单,它会占用数据库。这很容易测试。 我以前也遇到过同样的麻烦。在此之前我已经运行了存储过程,没有超时,通常会立即运行,但会在一夜之间运行而不运行。只是为了发现另一名员工打开了他们的查询窗口。关闭他们的窗口,然后它终于运行了。 看看这个,你会惊讶于表锁可以对你的应用程序做些什么。

我这样说是因为你说问题是间歇性的。它来来去去。我怀疑是表锁。无论是应用程序执行此操作,还是由另一个用户对数据库进行查询来完成。如果不是其他用户,请检查以确保您的应用程序在每次使用它们时都关闭与数据库的连接。

【讨论】:

  • 你可能是对的。我回避了这个问题以完成我当时需要做的事情,而没有完全找到问题的根源。如果它再次出现,我会记住这一点;谢谢
  • 我遇到了同样的问题。表锁是原因。谢谢。 +1
【解决方案2】:
  • 可能有一些代码不小心将连接或命令的超时设置为一个非常小的值。
  • 也许程序确实偶尔需要一段时间才能运行,例如如果服务器正在执行其他操作或统计信息已过时
  • 您能否使用分析器捕获超时情况,如果可以,proc 实际上是否需要很长时间才能执行?

如上所述,here SET NO_BROWSETABLE ON 类似于在选择中使用FOR BROWSE。我猜它是 ado 自动生成的,它认为您可能想要更新该记录集。您可能可以设置 Recordset 的一个属性来阻止那些被发布,但这似乎不太可能是问题所在。

【讨论】:

  • 感谢您的回答。第一个建议 - 不,我已经运行了所有代码/“GetOpenConnection”类型代码,并且没有设置超时。 2:绝对不是服务器负载问题。我之前在我们一直在使用此代码的应用程序上运行了 jmeter 负载测试/所涉及的 sp 高度优化/也正在实时使用中,客户对其施加的负载比我一次性使用它要多得多。这个问题没有在实时系统上报告,只是在我正在开发的测试系统上 - 所以可能是数据库本身的问题..?请参阅我上面的评论。在分析器中捕获
猜你喜欢
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 2019-11-18
  • 1970-01-01
相关资源
最近更新 更多