Падение производительности в транзакционной базе данных DB2 после связи с SQL Server 2005
У нас есть мэйнфрейм AS400, на котором работает наша транзакционная база данных DB2. У нас также есть настройка SQL Server, которая загружается каждую ночь с данными из AS400. Настройка SQL Server предназначена для создания отчетов.
Я могу связать два сервера баз данных, НО, есть опасения по поводу того, насколько сильно может пострадать производительность DB2 из-за запросов, поступающих с SQL Server.
По сути, есть опасение, что если мы начнем работать с DB2 запросами из SQL Server, мы сломаем транзакционную систему и испортим заказы и доставку.
Заранее благодарим за любые знания, которыми можно поделиться.
2 ответа
Любой, у кого есть ответ на вопрос о производительности, ошибается:-) Надлежащий ответ всегда "это зависит". Настройка производительности лучше всего выполняется через измерение, измените одну переменную, повторите.
DB2 for i не должна даже замечать, выполняет ли кто-то оператор SELECT из 1000 строк. Примите предложение Бенни и запустите его, пока IBM i смотрит в сторону. Если им нужна подсказка, используйте WRKACTJOB и сортируйте по столбцу Int. Это представляет интерактивное время ответа. Я предполагаю, что запрос будет завершен, прежде чем они успеют заметить, что он был активен.
Если это кажется неприемлемым для руководства, то, возможно, предложите протестировать его до или после нескольких часов, когда это не может повлиять на интерактивную производительность.
Кроме того, ребята из RPG могут создавать таблицы Excel также на лету. Скотт Клемент опубликовал некоторые обертки RPG над классами Java POI/HSSF. Кроме того, у Джованни Перротти на http://www.easy400.net/ есть несколько примеров предоставления электронной таблицы Excel с веб-страницы.
Я бы в основном согласился с Баком, набор результатов в 1000 строк не представляет особой проблемы...
Если, конечно, система просматривает миллиарды строк в сотнях таблиц, чтобы получить 1000 интересующих вас строк.
Предполагая, что полезный индекс существует, 1000 строк не должны иметь большого значения. Если у вас установлен IBM i Access для Windows, есть компонент System i Navigator, который называется "Запуск сценариев SQL", который включает в себя "Наглядное объяснение", которое предоставляет визуальное объяснение плана выполнения запроса. Посмотрите, что вы можете убедиться, что индекс используется.
На ключевой вещи, удостоверьтесь, что работа делается на i. При использовании стандартной связанной таблицы MS SQL Server попытается извлечь все строки, а затем выполнить собственное "где".
выберите * из MYLINK.MYIBMI.MYLIB.MYTABE, где MYKEYFLD = '00335';
Принимая во внимание, что этот формат отправляет инструкцию на удаленный сервер для обработки и просто возвращает результаты:
select * from openquery (MYLINK, 'select * from mylib.mytable где MYKEYFLD = ''00335''');
Кроме того, вы могли бы попросить ребят создать вам хранимую процедуру, которую вы можете вызвать, чтобы получить результаты, которые вы ищете. Лично это мой предпочтительный метод.
Чарльз