Связанный сервер SQL Server 2005 с проблемой производительности DB2 - PullRequest
1 голос
/ 17 сентября 2008

У меня машина SQL Server 2005 с JDE DB2, настроенной как связанный сервер.

По какой-то причине производительность любых запросов из этого ящика в ящик db2 ужасна.

Например. Следующее занимает 7 минут для запуска из Management Studio

SELECT     *
FROM       F42119 
WHERE     SDUPMJ >= 107256

Принимая во внимание, что для запуска в Навигаторе iSeries требуются секунды

Есть мысли? Я предполагаю, что некоторые проблемы с конфигурацией.

Ответы [ 5 ]

5 голосов
/ 29 октября 2008

В определенных поисках SQL Server решит собрать всю таблицу в себя и отсортировать и выполнить поиск данных в SQL Server вместо отправки запроса на удаленный сервер. Обычно это проблема с настройками сортировки.

Убедитесь, что у провайдера установлены следующие параметры: Доступ к данным, Совместимость сопоставлений, Использовать дистанционную сортировку

Затем создайте новый связанный сервер, используя поставщика, и выберите следующие параметры поставщика. Динамические параметры, Вложенные Запросы, Разрешить в процессе

После установки параметров слегка измените запрос, чтобы получить новый план запроса.

1 голос
/ 29 октября 2008

В проекте с интеграцией DB2 я заменял каждый запрос с помощью прямого выбора или просмотра хранимыми процедурами, вызывающими функцию OPENQUERY.

Моя интерпретация заключается в том, что SqlServer извлекает всю таблицу перед применением условий WHERE, тогда как OPENQUERY передает оператор SQL непосредственно драйверу db.

В любом случае, после модификаций производительность была приемлемой.

1 голос
/ 19 сентября 2008

Это может быть проблема с памятью на вашем компьютере с SQL Server. Недавно я узнал, что связанные запросы к серверу используют распределение памяти ОС. В то время как собственные запросы SQL Server используют память, предварительно выделенную SQL Server. Если ваш компьютер с SQL Server настроен на использование 90% или более памяти сервера, я бы немного уменьшил масштаб. Может быть, 60% это правильное место.

Еще одна вещь, которую нужно проверить, - это приоритет процессора SQL Server. Убедитесь, что «Повышение приоритета SQL Server» не включено.

Я предполагаю, что вы проходите через ODBC для доступа. Помните, что вы пишете здесь не нативные db2-запросы, а ODBC-sql-запросы. Если вам нужны только данные только для чтения, вы можете попробовать настроить источник данных ODBC на режим только для чтения (если это вариант).

0 голосов
/ 19 сентября 2008

У меня было несколько проблем с DB2 как связанным сервером. Я не знаю, решит ли это ваши проблемы, но вот что исправило мое:

1) Включена поддержка отложенного закрытия и предварительная выборка во время EXECUTE в настройках ODBC 2) Добавить «ТОЛЬКО ДЛЯ FETCH» на всех выбранных 3) Запрос с использованием метода SELECT * FROM OPENROWSET (LinkedServerName, 'SQL Command')

0 голосов
/ 18 сентября 2008

Моя первая мысль пойдет на водителей. Несколько лет назад мне пришлось связать DB2 с SQL Server 2000, и было чрезвычайно трудно найти правильную комбинацию драйверов и параметров настройки, которая бы работала ...

Так что, возможно, из-за этого я и предвзят, но я бы попробовал обновить или понизить драйвер или изменить настройки, чтобы драйвер DB2 мог запускать INPROC (если это еще не сделано).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...