SQL Server 2005链接服务器到DB2性能问题

时间:2020-03-05 18:59:26  来源:igfitidea点击:

我有一台将JDE DB2设置为链接服务器的SQL Server 2005计算机。

由于某种原因,从此框到db2框的所有查询的性能都非常糟糕。

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

SELECT     *
FROM       F42119 
WHERE     SDUPMJ >= 107256

在iSeries Navigator中运行需要花费几秒钟

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

解决方案

回答

我的第一个想法将归司机。多年前,我不得不将DB2链接到SQL Server 2000,并且很难找到能够正常工作的驱动程序和设置参数的正确组合。

因此,也许我因此而抱有偏见,但我将尝试升级或者降级驱动程序或者更改设置,以便DB2驱动程序可以运行INPROC(如果尚未这样做)。

回答

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

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

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

回答

我将DB2作为链接服务器遇到了一些问题。我不知道它是否可以解决问题,但这是固定的解决方案:

1)在ODBC设置的EXECUTE期间启用了惰性关闭支持和预取
2)在所有选择项上添加"仅用于观看"
3)使用SELECT * FROM OPENROWSET(LinkedServerName,'SQL Command')方法进行查询

回答

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

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

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

设置选项后,略微更改查询以获取新的查询计划。

回答

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

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

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