【问题标题】:SQL Server 2005 and DB2 iseries(Linked server) endless execution query timeSQL Server 2005 和 DB2 iseries(Linked server) 无限执行查询时间
【发布时间】:2013-12-30 08:31:04
【问题描述】:

查询执行有问题(在 SQL Server 2005 上链接的 DB2iseries V6R1)

当我在 DB2 上执行它时,时间是 0 毫秒,但在 SQL Server 上同样的时间是无穷无尽的。 (我已经等了 5 分钟)

查询只返回一行,所以我不认为这是数据大小问题。

此外,大多数其他查询都可以正常工作..

有什么想法吗?

【问题讨论】:

  • Endless 超过 5 分钟 ....
  • @marc_s 他应该在发布这个问题之前等待 /endless/ 的时间吗? ;-) 如果它没有在 5 分钟内结束,那么它可能需要多长时间才能做出响应是否重要?如果它在 DB2 上几乎是即时的,那么它不仅仅是在等待一个大型复杂查询。如果您与 IBM 的 DB2 for i 专家交谈,他们称 /long time/ 为 2 秒,所以 5 分钟是 /ages/ 或 /eons/ 用于少量数据,你不会说吗?

标签: sql-server database sql-server-2005 linked-server db2-400


【解决方案1】:

可能表被锁定了。

如果可能,使用 nolock 发送请求 (When should you use "with (nolock)")

【讨论】:

  • 我试过 WITH(NOLOCK) 但没有更好的。我认为链接服务器可能存在 WHERE 条件问题。当我在没有 where 子句的情况下执行查询时,我看到返回的行。
【解决方案2】:

我使用了OPENQUERY 而不是经典的(SELECT * FROM MyLinkedServer.MyDatabase.DBO.SomeTable),而且效果很好。

看起来openquery 正在使用更好的索引引擎。

.

【讨论】:

    【解决方案3】:

    有时,我看到使用 MS Access 从 System i 上的 DB2 获取数据的类似结果。使用 System i Navigator 或 STRSQL,查询运行速度非常快。但是,当运行与 MS Access 直通查询或 Access 中针对指向主机的链接表的查询相同的精确查询时,无论是通过 ODBC,结果都会降低性能。为了解决这个问题,我通常将查询嵌入到主机上的 SQL 视图中,以向主机推送尽可能多的处理,并消除 MS Access 修补查询或以某种方式错误处理结果集的倾向。从 Access 引用主机 SQL 视图通常可以解决性能问题。

    如果我在 SQL Server 从 i 上的 DB2 获取数据时遇到同样的症状,我会倾向于做同样的事情,因为它可能会最大化性能并最小化风险。在主机上创建 SQL 视图还会创建一个可能在其他地方派上用场的对象,从而创造代码重用机会。

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 2018-11-08
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      相关资源
      最近更新 更多