【问题标题】:SQL Server 2005 Linked Server to DB2 Performance issueSQL Server 2005 链接服务器到 DB2 性能问题
【发布时间】:2012-08-15 01:04:12
【问题描述】:

我有一台 SQL Server 2005 机器,其中 JDE DB2 设置为链接服务器。

由于某种原因,从这个盒子到 db2 盒子的任何查询的性能都很糟糕。

例如。以下从 Management Studio 运行需要 7 分钟

SELECT     *
FROM       F42119 
WHERE     SDUPMJ >= 107256

而在 iSeries Navigator 中运行需要几秒钟

有什么想法吗?我假设一些配置问题。

【问题讨论】:

    标签: sql-server db2


    【解决方案1】:

    在某些搜索中,SQL Server 将决定将整个表拉到自身并在 SQL Server 中对数据进行排序和搜索,而不是将查询发送到远程服务器。这通常是排序规则设置的问题。

    确保提供程序设置了以下选项: 数据访问, 排序兼容, 使用远程整理

    然后使用提供程序创建一个新的链接服务器并选择以下提供程序选项 动态参数, 嵌套查询, 允许处理中

    设置选项后稍微更改查询以获得新的查询计划。

    【讨论】:

    • 对我来说,Collat​​ion Compatible 让一切变得不同。将我的更新语句从约 45 秒缩短到 1 秒。谢谢!
    【解决方案2】:

    这可能是您的 SQL Server 计算机上的内存问题。我最近了解到链接服务器查询使用操作系统分配的内存。而本机 SQL Server 查询使用 SQL Server 预分配的内存。如果您的 SQL Server 机器配置为使用 90% 或更多的服务器内存,我会稍微缩减一点。也许 60% 是合适的地方。

    要检查的另一件事是 SQL Server 处理器优先级。确保未启用“提升 SQL Server 优先级”。

    我假设您正在通过 ODBC 进行访问。请记住,您在这里编写的不是本机 db2 查询,而是 ODBC sql 查询。如果您只需要只读数据,您可能想尝试将 ODBC 数据源配置为只读模式(如果可以的话)。

    【讨论】:

      【解决方案3】:

      在一个与 DB2 集成的项目中,我通过调用 OPENQUERY 函数的存储过程直接选择或查看替换了每个查询。

      我的解释是 SqlServer 在应用 WHERE 条件之前获取整个表,而 OPENQUERY 将 SQL 语句直接传递给 db 驱动程序。

      无论如何,修改后的性能是可以接受的。

      【讨论】:

        【解决方案4】:

        我首先想到的是司机。几年前,我不得不将 DB2 链接到 SQL Server 2000,而且很难找到正确的驱动程序和设置参数组合,可以工作......

        所以也许我因此而有偏见,但我会尝试升级或降级驱动程序或更改设置,以便 DB2 驱动程序可以运行 INPROC(如果它还没有这样做的话)。

        【讨论】:

          【解决方案5】:

          我在将 DB2 作为链接服务器时遇到了几个问题。我不知道它是否会解决您的问题,但这是解决我的问题:

          1) 在 ODBC 设置中的 EXECUTE 期间启用延迟关闭支持和预取 2)在所有选择上添加“FOR FETCH ONLY” 3) 使用 SELECT * FROM OPENROWSET(LinkedServerName, 'SQL Command') 方法查询

          【讨论】:

            猜你喜欢
            • 2014-02-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多