我有一台SQL Server 2005计算机,其中JDE DB2设置为链接服务器。
由于某种原因,从这个框到db2框的任何查询的性能都很糟糕。
例如。以下需要7分钟才能从Management Studio
运行SELECT *
FROM F42119
WHERE SDUPMJ >= 107256
在iSeries Navigator中运行需要几秒钟
有什么想法?我假设有一些配置问题。
答案 0 :(得分:5)
在某些搜索中,SQL Server将决定将整个表格拉到自身,并在SQL Server中对数据进行排序和搜索,而不是将查询发送到远程服务器。这通常是整理设置的问题。
确保提供商设置了以下选项: 数据访问, 整理兼容, 使用远程整理
然后使用提供程序创建新的链接服务器,并选择以下提供程序选项 动态参数, 嵌套查询, 允许进行中
设置选项后,请稍微更改查询以获取新的查询计划。
答案 1 :(得分:1)
这可能是SQL Server计算机上的内存问题。我最近了解到链接服务器查询使用操作系统分配内存。而本机SQL Server查询使用SQL Server预先分配的内存。如果您的SQL Server计算机配置为使用服务器内存的90%或更多,我会稍微扩展一下。也许60%是正确的选择。
要检查的另一件事是SQL Server处理器优先级。确保未启用“提升SQL Server优先级”。
我假设您正在通过ODBC进行访问。请记住,您不是在这里编写本机db2查询,而是在ODBC sql查询中编写。如果您只需要只读数据,则可能需要尝试将ODBC数据源配置为只读模式(如果这是一个选项)。
答案 2 :(得分:1)
在DB2集成的项目中,我通过调用OPENQUERY函数的存储过程直接选择或查看来替换每个查询。
我的解释是SqlServer在应用WHERE条件之前获取整个表,而OPENQUERY将SQL语句直接传递给db驱动程序。
无论如何,修改后的表现是可以接受的。
答案 3 :(得分:0)
我的第一个念头是司机。几年前我不得不将DB2链接到SQL Server 2000,并且找到可行的驱动程序和设置参数的正确组合非常困难......
所以也许我因此而有偏见,但我会尝试升级或降级驱动程序或更改设置,以便DB2驱动程序可以运行INPROC(如果它还没有这样做)。
答案 4 :(得分:0)
我将DB2作为链接服务器遇到了一些问题。我不知道它是否会解决你的问题,但这是我的问题:
1)在ODBC设置中的EXECUTE期间启用延迟关闭支持和预取 2)在所有选择上添加“FOR FETCH ONLY” 3)使用SELECT * FROM OPENROWSET(LinkedServerName,'SQL Command')方法进行查询