Есть ли в iSeries DB2 хороший оптимизатор?

Разработчик MS SQL изучает iSeries DB2 здесь.

Меня попросили переписать некоторые отчетные SQL-запросы, которые выполняются вечно, и они огромны, объединяют десятки таблиц и т. д.

Однако, когда я подошел к этому, используя типичные шаги оптимизации MS SQL, такие как замена NOT EXISTS на соединения, я сначала не увидел никаких улучшений. Должен ли я беспокоиться, или оптимизатор заботится о таких очевидных вещах?


person ajeh    schedule 25.10.2013    source источник
comment
FWIW, на этом сайте мы пытаемся [сосредоточиться на конкретных проблемах программирования][stackoverflow.com/about]. Обычно мы предпочитаем, чтобы более общие вопросы по базе данных публиковались на нашем [сайте DBA][dba.stackexchange.com/]. Многие из тех же людей там, но вы можете услышать от кого-то, кто имеет более специализированные технические знания.   -  person WarrenT    schedule 26.10.2013
comment
Полезно знать, спасибо!   -  person ajeh    schedule 27.10.2013


Ответы (2)


DB/2 полностью отличается от MS SQL, и я не ожидаю, что множество ручных оптимизаций окажут такое же влияние.

Существует ряд факторов, связанных с производительностью и оптимизацией DB/2. Я бы посоветовал начать с документации по оптимизации производительности запросов с помощью запроса инструменты оптимизации.

Выполнение запроса с помощью, например, Visual Explain , должен дать более четкий ответ.


Производительность IBM i Access для Windows ODBC

person James Allman    schedule 25.10.2013
comment
Вы бы сделали это, если бы видели только запросы. Они ужасны. К сожалению, у меня есть только ODBC-соединение с сервером. - person ajeh; 25.10.2013
comment
@ajeh Обычно вы можете установить iSeries Access непосредственно с сервера и использовать учетные данные ODBC для подключения. Это должно дать вам доступ к необходимым инструментам профилирования. - person James Allman; 25.10.2013
comment
Мне был предоставлен доступ к блоку с визуальным объяснением, и теперь оно работает с объяснением запроса в течение 50 минут подряд. Сам запрос занимает около 15. Таким образом, я возвращаюсь к началу с вопросом: насколько плохи многочисленные вложенные выборки с объединениями и существует/не существует для оптимизатора DB2? Если бы это был MS SQL, я бы переписал это, используя хранимую процедуру с временными таблицами. Выиграет ли DB2 от такого подхода? - person ajeh; 28.10.2013
comment
Эксперты по производительности IBM DB2 for i обычно уводят вас от временных таблиц, но вместо этого предлагают общие табличные выражения. Надлежащие индексы являются жизненно важным фактором. JamesA дал хорошую ссылку. - person WarrenT; 29.10.2013

Возможно, самое очевидное, что нужно проверить, — убедиться, что у вас есть хорошие индексы для ваших объединений. Если нет, то создайте их. Индексы гораздо меньше влияют на производительность DB2 for i.

person WarrenT    schedule 25.10.2013
comment
Я считаю, что это так. Проблема в том, что запросы абсолютно неуправляемы, поскольку они включают в себя десятки объединенных подзапросов, некоторые из которых являются объединениями, а многие включают where exists и where not exists. - person ajeh; 27.10.2013
comment
По моему скромному опыту, логика exists имеет тенденцию работать довольно плохо по сравнению с логикой соединения или логикой in. YMMV. - person WarrenT; 29.10.2013
comment
Это приложение фактически не имеет никаких индексов — вместо этого они используют логические файлы с ключами. Я попытался заменить все существующие/не существующие соединениями, и это не имело никакого значения. - person ajeh; 29.10.2013
comment
Пока логический файл [LF] имеет ключ, он содержит (или совместно использует) индекс IBM i, который служит той же цели, что и индекс DB2, хотя и не обязательно столь же эффективно. Если вы используете более раннюю версию, ссылка на логический, а не на физический файл [PF] может привести к тому, что система будет использовать более старый оптимизатор CQE, а не SQE. В этом случае запросите PF, и оптимизатор выберет наилучший доступный индекс (или LF). Многие LF имеют логику WHERE, которая может дисквалифицировать их, если не в запросе на основе PF. Какой выпуск ОС вы используете? Ваш навигатор этой (или более поздней) версии плюс пакет обновлений? - person WarrenT; 29.10.2013
comment
Как долго это работает на SQL Server? - person WarrenT; 29.10.2013
comment
Возможно, вы захотите опубликовать запрос на DBA.stackexchange.com с соответствующими подробностями. - person WarrenT; 29.10.2013
comment
Версия 05.04.0014. Навигатор v7 r1 мод уровень 0 - person ajeh; 29.10.2013
comment
Если на вашем сервере работает IBM i 7.1, вам также необходимо обновить IBM i Access для Windows до версии 7.1 и установить последний пакет обновления. Navigator v5r4 не поддерживает DB2 for i 7.1, что, вероятно, объясняет проблему с наглядным объяснением. - person WarrenT; 30.10.2013
comment
В версии 7.1 новые функции были реализованы с помощью исправлений Technology Refresh. Чтобы узнать, на каком уровне исправлений находится DB2, используйте WRKGRPPTF SF99701. - person WarrenT; 30.10.2013