powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / оптимизатор запросов на 11.1
9 сообщений из 9, страница 1 из 1
оптимизатор запросов на 11.1
    #39799203
Toshkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
with s as (select id from ...)
select id from s
minus
select id from s
where f(id) <= 0;

with s as (select id from ...)
select id from s
where f(id) > 0;

1-й запрос отрабатывает за 5 секунд, 2-й - за 7 минут
хотя оптимизатор показывает цену 1-го запроса в 5 раз выше.
Статистику по всем связанным таблицам обновил - ничего принципиально не изменилось.
Что может быть не так с оптимизатором или с настройками базы?
...
Рейтинг: 0 / 0
оптимизатор запросов на 11.1
    #39799254
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нельзя сравнивать стоимость разных запросов.
Сравнивать можно стоимости разных планов одного запроса.
...
Рейтинг: 0 / 0
оптимизатор запросов на 11.1
    #39799277
Toshkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovНельзя сравнивать стоимость разных запросов.
Сравнивать можно стоимости разных планов одного запроса.

тем не менее, вопрос, почему 1-ый запрос работает на 2 порядка быстрее, остается
...
Рейтинг: 0 / 0
оптимизатор запросов на 11.1
    #39799715
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Toshkin,

Вы умеете получать план запроса с т. н. section actuals?
Прикрепите такие планы для обоих запросов.
...
Рейтинг: 0 / 0
оптимизатор запросов на 11.1
    #39799913
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovНельзя сравнивать стоимость разных запросов.
Сравнивать можно стоимости разных планов одного запроса.

А, собственно, почему? По моему пониманию, ибм-овский таймерон = 1/1000 секунды, а секунды можно сравнивать между собой.
Другое дело, что *верить* этим цифрам нельзя, что для разных планов одного запроса, что для нескольких. Даже если параметры tablespace и cpuspeed выставлены "правильно" и вся статистика собрана. Просто такой вот трудный и тяжёлый предмет, основанный на предположениях, которые часто не выполняются в реальности. Для начала, надо иметь представление, что означают планы и как оптимизатор считает стоимости (к сожалению, я не знаю ничего, кроме https://www.apress.com/gp/book/9781590596364 - Cost-Based Oracle Fundamentals. Lewis, Jonathan), а потом.... ну... в запросе из двух таблиц как-то можно разобраться и понять, а больше - дела становятся резко хуже...
...
Рейтинг: 0 / 0
оптимизатор запросов на 11.1
    #39799968
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Toshkinwith s as (select id from ...)
select id from s
minus
select id from s
where f(id) <= 0;

with s as (select id from ...)
select id from s
where f(id) > 0;

1-й запрос отрабатывает за 5 секунд, 2-й - за 7 минут
хотя оптимизатор показывает цену 1-го запроса в 5 раз выше.
Статистику по всем связанным таблицам обновил - ничего принципиально не изменилось.
Что может быть не так с оптимизатором или с настройками базы?
Это означает, что оптимизатор (исходя из каких-то предположений) ошибается в оценке стоимости работ.
Запросы (планы) напрямую тут, кстати, сравнивать нельзя. В общем случае они могут давать разные result set'ы. Но то, как удалось "обмануть" оптимизатор и заставить его отказаться от плохого плана, может быть ключём к пониманию "что было не так".

Хотелось бы спросить:
1. Ф-я f(x) - детерминированная? (хотя оптимизатор может и не использовать эту информацию).
2. Ф-я f(x) - монотонная?

Обычно это грубая ошибка (с точки зрения производительности) в предикате использовать функцию/выражение, включающие данные строки (какой-либо/каких-либо из колонок) и сравнивать с константой.
Мало чего можно придумать хуже для сколько-нибудь больших таблиц и малых ожидаемых result set'ов.

Какова селективность предиката "f(id) > 0" ? Если у Вас нету индекса по выражению, самой DB2 взять эту информацию не от куда, сколько Вы статистику ни обновляйте.
...
Рейтинг: 0 / 0
оптимизатор запросов на 11.1
    #39800031
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, ну, "по здравому смыслу"
кажется, что
и
-- minus
select id from s
where f(id) <= 0;

и

select id from s
where f(id) > 0

должен быть фуллскан и второй запрос был бы быстрее... если s была бы таблицей. Когда же s as (select id from ...), произошло какое-то переписывание запроса во что-то. А в (select id from ...) может быть чёрт знает что.

И с функцией f далеко не всё ясно - если она на SQL/PL, возможна подстановка с возможными последствиями.

И неизвестно, насколько адекватны PAGESIZE, EXTENTSIZE, PREFETCHSIZE, OVERHEAD!!!, TRANSFERRATE!!!
https://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000929.html
...
Рейтинг: 0 / 0
оптимизатор запросов на 11.1
    #39801653
Toshkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot CawaSPb]Toshkinwith s as (select id from ...)
Хотелось бы спросить:
1. Ф-я f(x) - детерминированная? (хотя оптимизатор может и не использовать эту информацию).
2. Ф-я f(x) - монотонная?

Обычно это грубая ошибка (с точки зрения производительности) в предикате использовать функцию/выражение, включающие данные строки (какой-либо/каких-либо из колонок) и сравнивать с константой.
Мало чего можно придумать хуже для сколько-нибудь больших таблиц и малых ожидаемых result set'ов.

Какова селективность предиката "f(id) > 0" ? Если у Вас нету индекса по выражению, самой DB2 взять эту информацию не от куда, сколько Вы статистику ни обновляйте.

f(x) - deterministic модульная, возвращает статус smallint от 0 до 4 и состоит из нескольких простых запросов по индексам.
...
Рейтинг: 0 / 0
оптимизатор запросов на 11.1
    #39801663
Toshkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эффект пропал.
Теперь второй запрос работает в полтора - два раза быстрее, что и логично.
Наверно, повлиял перезапуск инстанции после сбора статистики...
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / оптимизатор запросов на 11.1
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]