Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / виснет сервер / 14 сообщений из 14, страница 1 из 1
11.01.2019, 13:30
    #39758425
Asic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
виснет сервер
Добрый день.
Может кто подскажет, как быть в данной ситуации?
Запрос убивает сервер при его выполнении. Запрос в результате имеет > 4млн. строк
Собственно вот сам запрос и его план выполнения:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select t1.Id, t1.Names, t2.Id, t2.Num,
  t2.Typ, t2.nt, t3.Typ, t2.DateStart, t2.DateEnd,
  t4.Names,
  '^'+t3.cost cost1,
  dbo.f_rc2(t2.cost,t2.cost2) costdegree
from t4, t2, t1, t3
where t4.Id=t2.Id
  and t2.Id=t1.Id
  and t4.Id=t3.Id
and t3.Typ in(1)
order by t1.Names
...
Рейтинг: 0 / 0
11.01.2019, 13:36
    #39758430
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
виснет сервер
Ну, купите сервер помощнее. Или запрос не запускате. Или считайте частями, чтобы и остальным ресурсов оставалось.

Короче, зависит от того, чего вы хотите в итоге добиться.
...
Рейтинг: 0 / 0
11.01.2019, 13:45
    #39758435
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
виснет сервер
не сортируйте свои 4млн
...
Рейтинг: 0 / 0
11.01.2019, 16:59
    #39758547
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
виснет сервер
Asic,

у вас персоналка на 4 ядра?
...
Рейтинг: 0 / 0
11.01.2019, 17:09
    #39758556
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
виснет сервер
Asic,

Для таблицы t2 для начала вызываете функцию f_rc2(t2.cost,t2.cost2) и записываете полученный результат в таблицу t2, в новый столбец f_rc2_result.

А затем запускаете свой запрос, заменив вызов функции на использование ранее просчитанного столбца.
...
Рейтинг: 0 / 0
11.01.2019, 20:50
    #39758611
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
виснет сервер
Andy_OLAPДля таблицы t2 для начала вызываете функцию f_rc2(t2.cost,t2.cost2) и записываете полученный результат в таблицу t2, в новый столбец f_rc2_result.

А затем запускаете свой запрос, заменив вызов функции на использование ранее просчитанного столбца.Или, если в t2 много строк, нужно вместо функции использовать выражение, либо переписать функцию на inline.
...
Рейтинг: 0 / 0
11.01.2019, 20:53
    #39758614
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
виснет сервер
Владислав КолосовAsic,

у вас персоналка на 4 ядра?Скалярные функции вызываются медленно, неразумно покупать дорогой сервер и лицензии, если можно за 5 минут повысить скорость в сотню или тысячу раз. Хотя, если зарплата админов считается как процент от железа, как у строителей, то...
...
Рейтинг: 0 / 0
11.01.2019, 20:58
    #39758618
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
виснет сервер
alexeyvgВладислав КолосовAsic,

у вас персоналка на 4 ядра?Скалярные функции вызываются медленно, неразумно покупать дорогой сервер и лицензии, если можно за 5 минут повысить скорость в сотню или тысячу раз. Хотя, если зарплата админов считается как процент от железа, как у строителей, то...Хотя сортировка там в темпдб, это тоже медленно...
Проще всего проверить, запустив запрос без функции.
...
Рейтинг: 0 / 0
11.01.2019, 21:38
    #39758634
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
виснет сервер
Asic,

у вас там SortSpill ворнинг,

Yasha123 правильно заметил, сортировку уберете быстрей будет, если все таки нужна тогда используйте временный буффер

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
drop table if exists #tmp;

select co.ContractorId, co.ContractorName, cg.ContractGroupId, cg.ContractNumber,
  cg.DaysBeforePaymentType, cg.DaysBeforePayment, cg.GoodsTypeGroup, cg.Datex, cg.DateEnd,
  c.GoodsId, g.GoodsName,
  cg.OrderSumMin, cg.MultiplePack, cg.MultiplePallet,
  '^'+g.Barcode1 Barcode1,
  '12345678901234567890' BarcodeAuto,
  c.DeliveryQuantityPackMin, c.DeliveryQuantityMin,
  c.ContractFirst, c.ContractPrice2, dbo.f_proc2(c.ContractFirst,c.ContractPrice2) PriceProc,
  c.LineNumber
  into #tmp
from Contractx c, ContractGroup cg, Contractor co, Goods g
where c.ContractGroupId=cg.ContractGroupId
  and cg.ContractorId=co.ContractorId
  and c.GoodsId=g.GoodsId
and cg.GoodsTypeGroup in(1)

select * from #tmp order by ContractorName, ContractGroupId, LineNumber

...
Рейтинг: 0 / 0
14.01.2019, 11:58
    #39759238
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
виснет сервер
alexeyvgВладислав КолосовAsic,

у вас персоналка на 4 ядра?Скалярные функции вызываются медленно, неразумно покупать дорогой сервер и лицензии, если можно за 5 минут повысить скорость в сотню или тысячу раз. Хотя, если зарплата админов считается как процент от железа, как у строителей, то...

Каким образом вычисление запроса со скалярной функцией может, цитирую, "подвесить сервер"?
...
Рейтинг: 0 / 0
14.01.2019, 17:46
    #39759470
Исраэль.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
виснет сервер
Про сортировку Вам всё правильно сказали.
Вы ж не хотите все 4 млн. кому-то показывать?
Свой селект замените на count(*).
Если отстрелит быстро-значит, индексы в порядке и
неполадка в самом селекте, о чём вам уже сказали.
А если застрянет на count(*) пересчитайте некласторные индексы.
По тупому, коммандой create index, без всяких утилит reindex, dbcc,
толку от них никакого.
...
Рейтинг: 0 / 0
14.01.2019, 17:51
    #39759474
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
виснет сервер
авторСвой селект замените на count(*).
Если отстрелит быстро-значит, индексы в порядке и
неполадка в самом селекте
Ничоси(с)
...
Рейтинг: 0 / 0
14.01.2019, 17:53
    #39759476
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
виснет сервер
Исраэль.А если застрянет на count(*) пересчитайте некласторные индексы.
По тупому, коммандой create index, без всяких утилит reindex, dbcc,
толку от них никакого.Вы бредите.
...
Рейтинг: 0 / 0
14.01.2019, 18:03
    #39759483
Исраэль.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
виснет сервер
Ага, первый висяк разруливаю.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / виснет сервер / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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