Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с UNION ALL / 21 сообщений из 21, страница 1 из 1
25.04.2019, 12:06
    #39806133
mnbvcx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
По отдельности запросы выполняются моментально, а при объединении тормозят.
Типа каждый запрос меньше секунды, а ч-з UNION ALL - 34 секунды выполняется.
У кого-то такое бывало?

Microsoft SQL Server 2008 (SP3) - 10.0.5538.0 (X64) Apr 3 2015 14:50:02 Copyright (c) 1988-2008 Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.0 <X64> (Build 6003: Service Pack 2)
...
Рейтинг: 0 / 0
25.04.2019, 12:35
    #39806163
mnbvcx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
если даже написать

Код: sql
1.
2.
3.
4.
5.
select ''
UNION ALL
--2 запрос
select FIO
from ...



время выполнения 33 секунды ((
...
Рейтинг: 0 / 0
25.04.2019, 12:41
    #39806173
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
Разные запросы могут иметь разный план и разное время выполнения, это нормально.
...
Рейтинг: 0 / 0
25.04.2019, 12:46
    #39806181
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
mnbvcx,

планы выполнения надо смотреть
+
у вас не совсем последний сервис-пак
есть другой сервер под рукой попробовать?

почитайте
https://sqlperformance.com/2017/05/sql-plan/union-all-optimization
...
Рейтинг: 0 / 0
25.04.2019, 12:55
    #39806198
mnbvcx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
Что я сделал не так, если при одиночном запросе такая статистика

Время синтаксического анализа и компиляции SQL Server:
время ЦП = 0 мс, истекшее время = 0 мс.

(затронуто строк: 2)
Таблица "Worktable". Число просмотров 3835, логических чтений 39751, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "Worktable". Число просмотров 0, логических чтений 0, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "Documents". Число просмотров 4, логических чтений 422, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "refDocumentTypes". Число просмотров 2, логических чтений 53, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "Codes". Число просмотров 1, логических чтений 12, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "Clients". Число просмотров 5, логических чтений 761, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "refClientTypes". Число просмотров 1, логических чтений 2, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "refPersonTypes". Число просмотров 1, логических чтений 2, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "refSex". Число просмотров 1, логических чтений 2, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "refClientStatusTypes". Число просмотров 1, логических чтений 2, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "refLegalFormTypes". Число просмотров 1, логических чтений 2, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "Address". Число просмотров 3, логических чтений 843, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "Contracts". Число просмотров 0, логических чтений 2, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

Время работы SQL Server:
Время ЦП = 171 мс, затраченное время = 171 мс.

А если добавить к нему выше select '' UNION ALL, то какой-то ад наступает

Время синтаксического анализа и компиляции SQL Server:
время ЦП = 383 мс, истекшее время = 383 мс.

(затронуто строк: 3)
Таблица "Worktable". Число просмотров 2211639, логических чтений 16717829, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "refDocumentTypes". Число просмотров 1, логических чтений 1269, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "Clients". Число просмотров 579, логических чтений 130750, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "Documents". Число просмотров 4, логических чтений 1614, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "Codes". Число просмотров 1418, логических чтений 17497, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "refClientTypes". Число просмотров 1, логических чтений 2, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "refPersonTypes". Число просмотров 1, логических чтений 2, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "refSex". Число просмотров 1, логических чтений 2, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "refClientStatusTypes". Число просмотров 1, логических чтений 2, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "refLegalFormTypes". Число просмотров 1, логических чтений 2, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "Address". Число просмотров 3, логических чтений 843, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "Contracts". Число просмотров 0, логических чтений 2, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

Время работы SQL Server:
Время ЦП = 30795 мс, затраченное время = 31547 мс.
...
Рейтинг: 0 / 0
25.04.2019, 12:57
    #39806201
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
Содержимое планов запросов не раскрыто.
...
Рейтинг: 0 / 0
25.04.2019, 13:02
    #39806208
mnbvcx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
Гавриленко Сергей АлексеевичСодержимое планов запросов не раскрыто.
Как файл *.sqlplan приложить?
...
Рейтинг: 0 / 0
25.04.2019, 13:03
    #39806210
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
mnbvcxЧто я сделал не так...

планы разные строятся - видно даже по списку таблиц
...
Рейтинг: 0 / 0
25.04.2019, 13:21
    #39806233
Glebanski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
mnbvcx,

Попробуйте JOIN-om
...
Рейтинг: 0 / 0
25.04.2019, 14:20
    #39806270
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
mnbvcx,

вот ради интереса - как повлияет, если после запроса поставить
option (NO_PERFORMANCE_SPOOL, recompile)
или
option (NO_PERFORMANCE_SPOOL)

вроде бы разницы в последствиях не должно быть, но...

у меня примерно такие же непонятности были недавно
https://www.sql.ru/forum/1311749/mozhno-li-optimizatoru-predpisat-sdelat-vremennuu-tablicu

еще запросто один запрос выполняется быстрее параллельно, а второй - непараллельно
но объединенный запрос сервер крутит весь или так или так
тоже может влиять по идее, хотя у меня влияние было несущественное вроде бы, а роляла появляющаяся буферизация
...
Рейтинг: 0 / 0
25.04.2019, 14:33
    #39806281
mnbvcx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
Причем если вместо селекта из view вставить его определение, то Union ALL отрабатывает моментально
...
Рейтинг: 0 / 0
25.04.2019, 14:40
    #39806292
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
А попробуй поменять селекты местами.
...
Рейтинг: 0 / 0
25.04.2019, 14:46
    #39806294
mnbvcx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
982183А попробуй поменять селекты местами.
Те же 34 секунды(
...
Рейтинг: 0 / 0
25.04.2019, 14:50
    #39806299
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
NO_PERFORMANCE_SPOOL для 17ого сервера, сорри
...
Рейтинг: 0 / 0
25.04.2019, 15:07
    #39806314
mnbvcx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
Капец, на 2012-м запрос на той же бд отработал за меньше секунды (((

Microsoft SQL Server 2012 (SP4) (KB4018073) - 11.0.7001.0 (X64) Aug 15 2017 10:23:29 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: )
...
Рейтинг: 0 / 0
25.04.2019, 15:11
    #39806319
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
Гавриленко Сергей АлексеевичСодержимое планов запросов не раскрыто.
и не будет, похоже
...
Рейтинг: 0 / 0
25.04.2019, 21:38
    #39806522
mnbvcx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
komradГавриленко Сергей АлексеевичСодержимое планов запросов не раскрыто.
и не будет, похоже
Пока, по совету камрада komrad, рассчитываю на магию последнего сервис-пака.
Может завтра случится.
Вы же видели, что на 2012 всё ок.
mnbvcx на 2012-м тот же запрос на той же бд отработал за меньше секунды.

Microsoft SQL Server 2012 (SP4) (KB4018073) - 11.0.7001.0 (X64) Aug 15 2017 10:23:29 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: )
...
Рейтинг: 0 / 0
26.04.2019, 11:16
    #39806646
mnbvcx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
mnbvcx, сегодня после SP4 стало хуже, Время ЦП = 52838 мс, затраченное время = 53966 мс.

В аттачменте 2 плана в архиве.
...
Рейтинг: 0 / 0
26.04.2019, 11:32
    #39806657
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
mnbvcxmnbvcx, сегодня после SP4 стало хуже, Время ЦП = 52838 мс, затраченное время = 53966 мс.

В аттачменте 2 плана в архиве.

апдейтните статистику
...
Рейтинг: 0 / 0
26.04.2019, 11:50
    #39806671
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
Ролг Хупинmnbvcxmnbvcx, сегодня после SP4 стало хуже, Время ЦП = 52838 мс, затраченное время = 53966 мс.

В аттачменте 2 плана в архиве.

апдейтните статистику

Совет не верен.

Перепишите свой запрос "по-человечески".
Чтобы у оптимизатора не было выбора.
...
Рейтинг: 0 / 0
26.04.2019, 13:01
    #39806747
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с UNION ALL
mnbvcx,

Само-собой планы разные.
NL для Contracts без union all выполняется с outer reference, с union all без оного.
В результате все ваши рекурсивные CTE из vwУполномоченноеЛицоЮР лопатятся по полной программе.

Честно говоря, лично мне лениво разбираться из-за чего так происходит.

Попробуйте переписать как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select ''

UNION ALL

SELECT [ФИО]
	FROM
     Clients.dbo.Contracts x cross apply
     (
      select ... from [Clients].[dbo].[vwУполномоченноеЛицоЮР]
      where
       clientid = x.clientid and
		and (([КодТипаКлиента] = 20 and ДоляУК >= 20) OR ([КодТипаКлиента] = 21 and ДоляУК >= 25) OR ([КодТипаКлиента] = 17))
     ) z
where
  x.ContractID = (1969 +10000 - 10000)  
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с UNION ALL / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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