【问题标题】:The Dangers of Solving SQL0666 Errors With QUERYTIMEOUT=0QUERYTIMEOUT=0 解决 SQL0666 错误的危险
【发布时间】:2018-03-20 15:13:16
【问题描述】:

我在 IBM AS400 DB2 SQL v6r1 服务器上使用 Microsoft Access 2007。最近,我开始通过将一些更复杂的 Access 查询转换为 Pass-Through 类型来扩展我的 DB2 体验。查询速度的提高是惊人的,但也是意料之中的,尤其是在我们较大的表中,有些表有 20,000,000 多行。

正如人们对 Access + DB2 所期望的那样,我遇到了 SQL0666 错误。或者至少......我现在期待它,因为我遇到了很多。我通过增加传递查询的“ODBC 超时”属性应用了自助并解决了这个问题。通过增加它直到查询有效,然后将它加倍,我找到了一个逻辑上安全的值。

无论 Access 以何种方式计算其对查询持续时间的估计,它似乎都与现实严重不成比例。如果我将这样的查询复制/粘贴到 IBM iNavigator SQL 窗口中并在那里运行它,它只需要一小部分时间,有时是 Access 认为它​​应该花费的时间的 1/10。

昨天我偶然发现了以下网页,其中描述了完全消除查询超时问题的步骤。我发现它在 DSN 中添加了“QUERYTIMEOUT=0”,这似乎是 SQL0666 错误的永久解决方案。

https://kb.rfgen.com/kb/index.php?View=entry&EntryID=107

但是……

这不是很危险吗..?

一个失控的查询是否会浸没服务器,直到每个人都尖叫或崩溃..?

是否有另一个更深的超时限制来防止进程失控......?

我很想将它添加到我的所有查询中,但作为一个关心的书呆子,我对此犹豫不决。

【问题讨论】:

  • 在 i-server 端,有一个单独的系统范围的查询时间限制。见ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzakz/…。也许您应该投资于优化查询...?
  • 而且...我很高兴我问了。值“数据库查询时间限制”设置为“无最大值”。谢谢你指出。至于优化查询,我会尽我所知。我确实了解优化的某些方面是由服务器自动处理的,例如将子查询作为连接处理(但我还是尝试这样做),但除此之外我不知道。

标签: ms-access db2 odbc ms-access-2007 db2-400


【解决方案1】:

执行查询运行时间估计的不是 Access,而是 Db2 for iSeries 优化器本身。

您可以在多个级别设置超时,如this technote 中所述,但 ODBC 设置会覆盖所有级别。

您的保留是正确的:超时的目的正是为了防止“失控”查询消耗过多的资源。使用现代硬件使服务器崩溃的风险可能很小,但并发用户查询的性能肯定会受到影响。

您可能需要与您的服务器管理员交谈,以确定您的环境中可能的适当最大超时值,并在您的数据源定义中使用它。

Manual reference.

【讨论】:

  • 我是服务器管理员...勉强,哈哈。但是我们从我们使用的大型软件包的供应商那里获得了 mondo 技术支持,所以当我确实需要超出普通用户可能需要的支持时,他们通常愿意提供帮助。谢谢你的链接。
  • 如果您担心查询对更一般的系统性能的影响(或者实际上您只是想让它们尽可能快地运行),我建议您看看出色的 Visual Explain功能(在 IBM i Navigator 中运行 SQL 脚本)。
  • @MandyShaw ...圣牛..!!我经常使用 Run SQL Scripts 窗口,但我从不摆弄 Visual Explain。我可以看到它如何非常方便地找出复杂查询可能在哪里出现日志干扰。谢谢!
猜你喜欢
  • 2013-03-21
  • 1970-01-01
  • 2011-04-09
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多