powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / виснет сервер
14 сообщений из 14, страница 1 из 1
виснет сервер
    #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
виснет сервер
    #39758430
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, купите сервер помощнее. Или запрос не запускате. Или считайте частями, чтобы и остальным ресурсов оставалось.

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

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

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

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

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

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

у вас персоналка на 4 ядра?Скалярные функции вызываются медленно, неразумно покупать дорогой сервер и лицензии, если можно за 5 минут повысить скорость в сотню или тысячу раз. Хотя, если зарплата админов считается как процент от железа, как у строителей, то...Хотя сортировка там в темпдб, это тоже медленно...
Проще всего проверить, запустив запрос без функции.
...
Рейтинг: 0 / 0
виснет сервер
    #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
виснет сервер
    #39759238
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgВладислав КолосовAsic,

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

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


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