Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 План запроса MERGE JOIN UNION  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
Был запрос в 1 select с кучей case, из-за чего работал ну очень медленно.
Переписал на 10 запросов через UNION, план показал прирост на 48%.
Дольше всех стоит операция MERGE JOIN (UNION) (1 из 10) она весит 95-98% от всего плана. Можно ли ее как-то ускорить или это оптимальный вариант?
Есть выборки на которых старая процедура работала более 5 минут, новая же отрабатывает максимум за 20 секунд. Но для меня 20 секунд многовато.
9 июл 13, 10:41    [14539719]     Ответить | Цитировать Сообщить модератору
 Re: План запроса MERGE JOIN UNION  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
union all?
9 июл 13, 10:51    [14539777]     Ответить | Цитировать Сообщить модератору
 Re: План запроса MERGE JOIN UNION  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
X-Cite
Был запрос в 1 select с кучей case, из-за чего работал ну очень медленно.
Переписал на 10 запросов через UNION, план показал прирост на 48%.
Дольше всех стоит операция MERGE JOIN (UNION) (1 из 10) она весит 95-98% от всего плана. Можно ли ее как-то ускорить или это оптимальный вариант?
Есть выборки на которых старая процедура работала более 5 минут, новая же отрабатывает максимум за 20 секунд. Но для меня 20 секунд многовато.

Посмотрите статистику IO, сколько чтений происходит. Необходимо установить причину, а там уже будет видно, можно ли ускорить.
9 июл 13, 11:00    [14539832]     Ответить | Цитировать Сообщить модератору
 Re: План запроса MERGE JOIN UNION  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
нет, просто Union
К тому же строки не смогут дублироваться, т.к. фильтр выбирается в выборке.
Общий вид запроса такой.
SELECT
  a.status,
... тут еще 50 полей
FROM
  Table a
... а тут еще 20 джойнов
WHERE
  a.status = 1
UNION
SELECT
  a.status
FROM
  Table a
... а тут еще 10 джойнов
WHERE
  a.status = 2
SELECT
  a.status
FROM
  Table a
... а тут еще 15 джойнов
WHERE
  a.status = 3
ORDER BY
  a.id
9 июл 13, 11:03    [14539846]     Ответить | Цитировать Сообщить модератору
 Re: План запроса MERGE JOIN UNION  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
SELECT
  a.status,
... тут еще 50 полей
FROM
  Table a
... а тут еще 20 джойнов
WHERE
  a.status = 1
UNION
SELECT
  a.status
... тут еще 50 полей
FROM
  Table a
... а тут еще 10 джойнов
WHERE
  a.status = 2
UNION
SELECT
  a.status
... тут еще 50 полей
FROM
  Table a
... а тут еще 15 джойнов
WHERE
  a.status = 3
ORDER BY
  a.id
[/quot]
9 июл 13, 11:06    [14539858]     Ответить | Цитировать Сообщить модератору
 Re: План запроса MERGE JOIN UNION  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
X-Cite
нет, просто Union
[/SRC]


так я и говорю, ставте union all...избавитесь от мерджа...будет только конкатенация


тем более, что:

X-Cite
К тому же строки не смогут дублироваться, т.к. фильтр выбирается в выборке.
[/SRC]
9 июл 13, 11:07    [14539863]     Ответить | Цитировать Сообщить модератору
 Re: План запроса MERGE JOIN UNION  [new]
Гость333
Member

Откуда:
Сообщений: 3683
X-Cite
нет, просто Union
К тому же строки не смогут дублироваться

Раз строки не могут дублироваться, то и делайте UNION ALL. Т.к. "просто" UNION добавляет дорогую операцию сортировки.
9 июл 13, 11:08    [14539874]     Ответить | Цитировать Сообщить модератору
 Re: План запроса MERGE JOIN UNION  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
Статистика в приложении

К сообщению приложен файл (StatisticIO.txt - 6Kb) cкачать
9 июл 13, 11:09    [14539882]     Ответить | Цитировать Сообщить модератору
 Re: План запроса MERGE JOIN UNION  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
Гость333
X-Cite
нет, просто Union
К тому же строки не смогут дублироваться

Раз строки не могут дублироваться, то и делайте UNION ALL. Т.к. "просто" UNION добавляет дорогую операцию сортировки.

Сделал UNION ALL
теперь MERGE JOIN Concatenation но те же 98%
9 июл 13, 11:11    [14539894]     Ответить | Цитировать Сообщить модератору
 Re: План запроса MERGE JOIN UNION  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
X-Cite
Гость333
пропущено...

Раз строки не могут дублироваться, то и делайте UNION ALL. Т.к. "просто" UNION добавляет дорогую операцию сортировки.

Сделал UNION ALL
теперь MERGE JOIN Concatenation но те же 98%


order by убирайте свой нафик, тогда должен будет быть чистый Concatenation
9 июл 13, 11:19    [14539953]     Ответить | Цитировать Сообщить модератору
 Re: План запроса MERGE JOIN UNION  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
Knyazev Alexey
X-Cite
пропущено...

Сделал UNION ALL
теперь MERGE JOIN Concatenation но те же 98%


order by убирайте свой нафик, тогда должен будет быть чистый Concatenation

Вы правы, но данные на выходе нужны отсортированные по id
9 июл 13, 11:22    [14539966]     Ответить | Цитировать Сообщить модератору
 Re: План запроса MERGE JOIN UNION  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
X-Cite
Вы правы, но данные на выходе нужны отсортированные по id


может на клиента проще это переложить?
9 июл 13, 11:23    [14539972]     Ответить | Цитировать Сообщить модератору
 Re: План запроса MERGE JOIN UNION  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
Knyazev Alexey
X-Cite
Вы правы, но данные на выходе нужны отсортированные по id


может на клиента проще это переложить?


Боюсь это сделать будет сложно,т.к. задач на его рефакторинг никто не поставит, благо убедил что надо выделить время переписать процедуру.

Кстати сравнил 2 плана с ORDER BY и без. 50 на 50 показал. Но без ORDER BY я хотябы вижу на что еще приходится нагрузка, как вариант можно дооптимизировать запросы без ORDER BY а потом в конце его повесить.

В целом 5-20 секунд это не 1-30 минут как было ранее.
9 июл 13, 11:29    [14540002]     Ответить | Цитировать Сообщить модератору
 Re: План запроса MERGE JOIN UNION  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
Сергей Викт.
Посмотрите статистику IO, сколько чтений происходит. Необходимо установить причину, а там уже будет видно, можно ли ускорить.

Статистика тут
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1033923&msg=14539882
Посмотрел, что из нее можно извлечь полезного?
9 июл 13, 15:14    [14541751]     Ответить | Цитировать Сообщить модератору
 Re: План запроса MERGE JOIN UNION  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
X-Cite
Сергей Викт.
Посмотрите статистику IO, сколько чтений происходит. Необходимо установить причину, а там уже будет видно, можно ли ускорить.

Статистика тут
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1033923&msg=14539882
Посмотрел, что из нее можно извлечь полезного?

Без знания плана выполнения запроса и структуры таблиц - ничего. Но вы то их знаете)
9 июл 13, 15:47    [14542012]     Ответить | Цитировать Сообщить модератору
 Re: План запроса MERGE JOIN UNION  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
Сергей Викт.
X-Cite
пропущено...

Статистика тут
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1033923&msg=14539882
Посмотрел, что из нее можно извлечь полезного?

Без знания плана выполнения запроса и структуры таблиц - ничего. Но вы то их знаете)

план и структуру знаю, но не совсем догоняю как можно использоваться в личных целях информацию собранную по STATISTIC IO.
Может есть какой мануал или хелп где расписано как этим пользоваться. в msdn просто описано, но мне этого мало.

Например логических чтений - Число страниц, считанных из кэша данных. И что с этого? что мне делать с этим если там цифры большие, а если маленькие? и т.д.
9 июл 13, 16:03    [14542167]     Ответить | Цитировать Сообщить модератору
 Re: План запроса MERGE JOIN UNION  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
X-Cite
Сергей Викт.
пропущено...

Без знания плана выполнения запроса и структуры таблиц - ничего. Но вы то их знаете)

план и структуру знаю, но не совсем догоняю как можно использоваться в личных целях информацию собранную по STATISTIC IO.
Может есть какой мануал или хелп где расписано как этим пользоваться. в msdn просто описано, но мне этого мало.

Например логических чтений - Число страниц, считанных из кэша данных. И что с этого? что мне делать с этим если там цифры большие, а если маленькие? и т.д.

14-15 главы в Книге: Руководство администратора
9 июл 13, 16:16    [14542283]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить