Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Распараллеливание процедур. Совет  [new]
НиколайСН
Member

Откуда:
Сообщений: 120
Добрый день, товарищи!

Есть некая процедура, которая состоит из подпроцедур, например:
CREATE Procedure as 
begin
   exec procedure_1;  
   exec procedure_2;   
end;

CREATE Procedure_2 as 
begin
   exec procedure_2_1;  /*5 min*/
   exec procedure_2_2;  /*8 min*/
   exec procedure_2_3;  /*15 min*/
   exec procedure_2_4;  /*4 min*/
end;


имеется процедура, которая это всё запускает, типа:
exec Procedure_1


Общее время выполнения процедуры Procedure занимает <t(procedure_1)>+5+8+15+4=32+ минуты, что является критически.

Предлагалось создание job для распараллеливания выполнения под-процедур в Procedure_2, для сокращения времени до максимального из 4-х, тоесть до /*15 min*/.

Есть ли какие решения по данной задаче?

ПыСы. В инете честно искал, но дельного не нашел. Возможно и плохо искал(
8 май 18, 11:37    [21395303]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
НиколайСН
Есть ли какие решения по данной задаче?
Service Broker
8 май 18, 11:51    [21395368]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
задача для SSIS же
8 май 18, 13:52    [21395855]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Какая версия SQL Server? И какая редакция?
8 май 18, 15:34    [21396163]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
НиколайСН
Member

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

Microsoft SQL Server 2012 (SP3-GDR) (KB4019092) - 11.0.6251.0 (X64) Jul 7 2017 07:14:24 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
8 май 18, 17:32    [21396532]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
НиколайСН
Member

Откуда:
Сообщений: 120
Руслан Дамирович,

а зачем мне ssis если у меня просто необходимо запустить несколько процедур параллельно в рамках даже одной Базы и нет всяких там integration services.
8 май 18, 17:34    [21396538]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
НиколайСН
Member

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

пойду поизучаю)
8 май 18, 17:34    [21396539]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33258
Блог
а потом окажется, что неспроста так и процедуры зависимы друг от друга )
8 май 18, 21:51    [21396972]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
Критик,

причем окажется, когда гениальный механик выкатит это на бой и уйдет в отпуск.
9 май 18, 17:27    [21398105]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3459
НиколайСН
invm,

пойду поизучаю)


пойти и поизучать так просто не получится, надо вникать.

Русану предлагал когда-то вариант асинхронного выполнения, типа fire-and-forget.
У него можно найти пример.

Кроме того, на кодепрожекте был пример с асинхронным выполнением.
9 май 18, 17:59    [21398141]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
НиколайСН
Руслан Дамирович,

а зачем мне ssis если у меня просто необходимо запустить несколько процедур параллельно в рамках даже одной Базы и нет всяких там integration services.
Затем что решение на SSIS делается за 5 минут, с зависимостями, обработкой ошибок и т.д.. Ну а так конечно много разных извращенных способов это сделать.
9 май 18, 19:29    [21398376]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7214
Стесняюсь спросить, это что за патерн проектирования?
НиколайСН
Добрый день, товарищи!

Есть некая процедура, которая состоит из подпроцедур, например:
CREATE Procedure as 
begin
   exec procedure_1;  
   exec procedure_2;   
end;

CREATE Procedure_2 as 
begin
   exec procedure_2_1;  /*5 min*/
   exec procedure_2_2;  /*8 min*/
   exec procedure_2_3;  /*15 min*/
   exec procedure_2_4;  /*4 min*/
end;
9 май 18, 22:14    [21398633]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
Relic Hunter
Стесняюсь спросить, это что за патерн проектирования?
фасад
9 май 18, 23:14    [21398717]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
МуМу
Member

Откуда:
Сообщений: 1120
Есть такое направление- параллельные вычисления. Рекомендую почитать, немного.
Смысл в том что вы должны учитывать зависимость процедур(входные параметры процедур, блокировки и т.п.) , вы должны уметь обрабатывать ошибки и возврат к общему транзакционному состоянию. Коллеги уже написали какие есть продукты от MS. Хотя можно и изобретать свое, только вот зря, многое придумали до нас.
10 май 18, 12:13    [21399544]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
broccoli
Member

Откуда:
Сообщений: 10
МуМу
Есть такое направление- параллельные вычисления. Рекомендую почитать, немного.
Смысл в том что вы должны учитывать зависимость процедур(входные параметры процедур, блокировки и т.п.) , вы должны уметь обрабатывать ошибки и возврат к общему транзакционному состоянию. Коллеги уже написали какие есть продукты от MS. Хотя можно и изобретать свое, только вот зря, многое придумали до нас.


А можно поподробнее ? есть какая нибудь ссылка ?
10 май 18, 13:22    [21399770]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
broccoli
Member

Откуда:
Сообщений: 10
НиколайСН,

если не хочется связываться с SSIS, можно сделать джоб который создает джобы, и запускает их.
после выполнения каждый джоб сам себя убивает, а основной ждет когда же все отработают.
10 май 18, 13:24    [21399777]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3459
broccoli
НиколайСН,

если не хочется связываться с SSIS, можно сделать джоб который создает джобы, и запускает их.
после выполнения каждый джоб сам себя убивает, а основной ждет когда же все отработают.


ну, да, а юзеру наверняка хочется при такой процедуре, чтобы её вызыватель был уверен, что после вызова все 4 отработали и успешно.
10 май 18, 14:28    [21400014]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
НиколайСН
Member

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

см. пост №1 от меня - я писал про Джобы. Конечно же можно, но я бы их хотел оставить на самый последний вариант.
14 май 18, 11:05    [21407450]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
НиколайСН
Member

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

всё гораздо проще - нету зависимостей, параметров и прочих фичей.

Они (процедуры типа 2_1-2_5) абсолютно независящие друг от друга. Именно поэтому и хочу их запускать параллельно.
И варианты БЕЗ джобов.

Дело в том, что я описал максимум в примере 1/300 от общей иерархии расчетов.
Переделывать все расчеты на SSIS - это на месяц геморроя, и пару месяцев тестов - на это никто не пойдёт!
14 май 18, 11:10    [21407466]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
Волшебного способа не существует. При любом варианте будут затраты на разработку и тестирование.
Наиболее подходящая под вашу задачу технология это сервис брокер, но он имеет, скажем так, особенности и учитывая, что вы его не знаете, то риски высоки.
SSIS, в данном случае, некий оверхед, но этот путь может оказаться для вас оптимальным с точки зрения затраты/риски/функционал. Что касается месяца разработки... ваша задача на ссис реализуется за день (в тех рамках что вы описали).
Если у вас нет спеца по ссис то делайте на том, что вы умеете - джобы.
14 май 18, 11:27    [21407529]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 2300
НиколайСН,

http://www.sqlnotes.info/category/parallel-task-scheduling/

я взял за основу 7 вариант, доработал под себя.
работает везде и на express-ах тоже
14 май 18, 11:28    [21407532]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
aleks222
Member

Откуда:
Сообщений: 851
НиколайСН
МуМу,

всё гораздо проще - нету зависимостей, параметров и прочих фичей.

Они (процедуры типа 2_1-2_5) абсолютно независящие друг от друга. Именно поэтому и хочу их запускать параллельно.
И варианты БЕЗ джобов.

Дело в том, что я описал максимум в примере 1/300 от общей иерархии расчетов.
Переделывать все расчеты на SSIS - это на месяц геморроя, и пару месяцев тестов - на это никто не пойдёт!


1. Хотеть не вредно. Вредно не хотеть.
2. Если они "абсолютно" независимы - дык, джоб - ваше фсе.
3. Запуск 10 процедур параллельно способен подзавесить сервер.
4. Эффективнее - оптимизировать процедуры.
14 май 18, 11:30    [21407537]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
НиколайСН
Member

Откуда:
Сообщений: 120
[quot aleks222]
НиколайСН
МуМу,
3. Запуск 10 процедур параллельно способен подзавесить сервер.


сервак ниразу более чем на 25% не был нагружен даже в самый пик.
Поэтому будет даже плюсом его нагрузить чем минусом)
14 май 18, 14:30    [21408234]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
НиколайСН
Member

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

Громадное спасибо)
Реально оч много вариантов уже придумано)

Спасибо)

На тестах вариант 7 реально работает)
14 май 18, 14:41    [21408280]     Ответить | Цитировать Сообщить модератору
 Re: Распараллеливание процедур. Совет  [new]
aleks222
Member

Откуда:
Сообщений: 851
[quot НиколайСН]
aleks222
пропущено...


сервак ниразу более чем на 25% не был нагружен даже в самый пик.
Поэтому будет даже плюсом его нагрузить чем минусом)


Плохо учили арифметику?

25% * 10 раз = 250%
14 май 18, 15:22    [21408503]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить