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

Откуда:
Сообщений: 7887
Привет

есть при создании отчета

select 
 ..., 
 dbo.func1(..., t.p),
 dbo.func2(..., t.p),
 ...
 dbo.funcN(..., t.p) 
from tabl t
where 
 ...


чтобы функции квазипараллельно (в разных потоках-нитях-процессах- ... кто как называет,
но не stream и не на паралл. процессорах) считались

PS А то за день, ..., месяц еще ничего 1-5 минут, а вот за 9 месяцев 8-14 часов.
29 окт 12, 16:25    [13392157]     Ответить | Цитировать Сообщить модератору
 Re: А возможно как-то в t-sql распараллелить на нити такое  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
За 9 месяцев давно надо было один раз рассчитать, положить в таблицу и на насиловать сервер.
29 окт 12, 16:26    [13392174]     Ответить | Цитировать Сообщить модератору
 Re: А возможно как-то в t-sql распараллелить на нити такое  [new]
AlexandrPlus
Member

Откуда:
Сообщений: 7887
Гавриленко Сергей Алексеевич
За 9 месяцев давно надо было один раз рассчитать, положить в таблицу и на насиловать сервер.



постоянно исправляются ошибочные, добавляются и корректируются данные в прошлом
29 окт 12, 16:32    [13392212]     Ответить | Цитировать Сообщить модератору
 Re: А возможно как-то в t-sql распараллелить на нити такое  [new]
Crimean
Member

Откуда:
Сообщений: 13148
AlexandrPlus,

ввести понятие "актуальность сохраненных данных" с требуемой дискретностью, сбратывать эти признаки при модификации "задним числом" и устанавливать при пересчете. пересчет сделать регламентом. или прям такие данные нужны именно в реалтайме? с учетом только-только-что сделанных правок задним числом? и подождать до завтра, пока регламент отработает - никак нельзя?
29 окт 12, 16:34    [13392227]     Ответить | Цитировать Сообщить модератору
 Re: А возможно как-то в t-sql распараллелить на нити такое  [new]
AlexandrPlus
Member

Откуда:
Сообщений: 7887
Гавриленко Сергей Алексеевич
За 9 месяцев давно надо было один раз рассчитать, положить в таблицу и на насиловать сервер.


но мне видится здесь можно применить приемы функционального программирования - считать кусками, там по месяцу и сложить, так как зависимости линейные все
29 окт 12, 16:36    [13392244]     Ответить | Цитировать Сообщить модератору
 Re: А возможно как-то в t-sql распараллелить на нити такое  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
AlexandrPlus
Гавриленко Сергей Алексеевич
За 9 месяцев давно надо было один раз рассчитать, положить в таблицу и на насиловать сервер.


но мне видится здесь можно применить приемы функционального программирования - считать кусками, там по месяцу и сложить, так как зависимости линейные все
Можно, да. Но вот серверу от этого легче не станет.
29 окт 12, 16:41    [13392276]     Ответить | Цитировать Сообщить модератору
 Re: А возможно как-то в t-sql распараллелить на нити такое  [new]
AlexandrPlus
Member

Откуда:
Сообщений: 7887
SQLServer параллелит же на процессоры (вот в настройках указывает, и у казал на все 4 процессора, что есть, параллелить) и на процессы само собой

МОЖНО КАК-ТО УКАЗАТЬ - ЧТО ИМЕННО НА КРУПНЫХ УЧАСТКАХ НАДО ОБЯЗАТЕЛЬНО ПАРАЛЛЕЛИТЬ?

PS Это же сервер никак не видит же.
29 окт 12, 16:51    [13392342]     Ответить | Цитировать Сообщить модератору
 Re: А возможно как-то в t-sql распараллелить на нити такое  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3650
Cost threshold for parallelism ??
29 окт 12, 16:55    [13392368]     Ответить | Цитировать Сообщить модератору
 Re: А возможно как-то в t-sql распараллелить на нити такое  [new]
AlexandrPlus
Member

Откуда:
Сообщений: 7887
Ozerov
Cost threshold for parallelism ??


ну да, эта тема - вот есть же грубые настройки
А в запросе указать можно как-то?
29 окт 12, 16:58    [13392386]     Ответить | Цитировать Сообщить модератору
 Re: А возможно как-то в t-sql распараллелить на нити такое  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
AlexandrPlus
SQLServer параллелит же на процессоры (вот в настройках указывает, и у казал на все 4 процессора, что есть, параллелить) и на процессы само собой

МОЖНО КАК-ТО УКАЗАТЬ - ЧТО ИМЕННО НА КРУПНЫХ УЧАСТКАХ НАДО ОБЯЗАТЕЛЬНО ПАРАЛЛЕЛИТЬ?

PS Это же сервер никак не видит же.
Параллелит далеко не все. С udf вообще беда.
29 окт 12, 17:11    [13392458]     Ответить | Цитировать Сообщить модератору
 Re: А возможно как-то в t-sql распараллелить на нити такое  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
AlexandrPlus
но мне видится здесь можно применить приемы функционального программирования - считать кусками, там по месяцу и сложить, так как зависимости линейные все
несколько инстансов на каждый своя udf
30 окт 12, 11:20    [13395284]     Ответить | Цитировать Сообщить модератору
 Re: А возможно как-то в t-sql распараллелить на нити такое  [new]
Spinifex
Member

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

OPTION (RECOMPILE, QUERYTRACEON 8649)
30 окт 12, 11:52    [13395517]     Ответить | Цитировать Сообщить модератору
 Re: А возможно как-то в t-sql распараллелить на нити такое  [new]
ziktuw
Member

Откуда:
Сообщений: 3552
AlexandrPlus
Привет

есть при создании отчета

select 
 ..., 
 dbo.func1(..., t.p),
 dbo.func2(..., t.p),
 ...
 dbo.funcN(..., t.p) 
from tabl t
where 
 ...


чтобы функции квазипараллельно (в разных потоках-нитях-процессах- ... кто как называет,
но не stream и не на паралл. процессорах) считались

PS А то за день, ..., месяц еще ничего 1-5 минут, а вот за 9 месяцев 8-14 часов.


Если вызовы функций джойнить с таблицей вызовами OUTER APPLY, а в полях ставить результат вызовов, есть шанс, что сервер распараллелит.
30 окт 12, 11:55    [13395538]     Ответить | Цитировать Сообщить модератору
 Re: А возможно как-то в t-sql распараллелить на нити такое  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
AlexandrPlus,

Создали больную структуру, теперь пытаетесь ей быстрые турбо костыли организовать:)
Убирайте нафиг функции они в сиквеле зло, переделайте запрос и будет вам счатье.
30 окт 12, 12:15    [13395662]     Ответить | Цитировать Сообщить модератору
 Re: А возможно как-то в t-sql распараллелить на нити такое  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Все зависит от условий where. Предположим условия таковы что распараллеливание возможно. Один из вариантов это надеятся на распараллеивание сервером. Совет уже прозвучал. Если хотите гарантированного результата. Разбейте этот запрос на N запросов в каждом из которых будет своя группа функций. Далее выполняйте их в отдельных соединениях , результаты скидывайте в доп. таблицы которые затем объединяйте.(наверняка в рекордсете должен быть какой то ключ,если нет то вынесите его в каждый запрос) . Вопрос как это все автоматизировать? Например сделать одной процедурой? - Можно автоматом создавать доп соединения,например через адоконекшион, в которых вызывать предопределенные процедуры.
31 окт 12, 11:36    [13401130]     Ответить | Цитировать Сообщить модератору
 Re: А возможно как-то в t-sql распараллелить на нити такое  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
МуМу
Разбейте этот запрос на N запросов в каждом из которых будет своя группа функций.
Лучше пилить по записям, чтобы не пришлось менять код, если захочется сделать N+1 потоков. (Хотя не на всяком ключе получится распилить равномерно).
МуМу
Вопрос как это все автоматизировать? Например сделать одной процедурой? - Можно автоматом создавать доп соединения,например через адоконекшион, в которых вызывать предопределенные процедуры.
Есть одноразовые джобы. Есть Service Broker.
31 окт 12, 13:05    [13401831]     Ответить | Цитировать Сообщить модератору
 Re: А возможно как-то в t-sql распараллелить на нити такое  [new]
Andret
Member

Откуда: Киев
Сообщений: 84
Плохой тон - использовать скалярные функции в табличных запросах.
Скалярная функция - это для работы с одной переменной. Вызов и выход из нее очень ресурсоемок. А вы это многократно делаете, да ещё и в цикле.

Исправьте на, может быть более громоздкие T-SQL конструкции, или дополнительный шаг с UPDATE и переменными, или реализуйте нужную логику в параллельной табличной функции, да и ещё варианты есть. Другими словами, сделайте рефакторинг и так больше не делайте. Потом увидите, что код вместо 8 часов будет выполняться 8 секунд :).

А хранимые итоги - это следующий шаг, - позволит довести скорость до менее 1 сек :)
1 ноя 12, 14:35    [13408867]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить