Имя: Пароль:
1C
1С v8
v8: Параллельные вычисления в 1С (исключительно для МС СКЛ)
,
0 gallam
 
11.02.13
09:43
Коллеги, появилась возможность выполнения параллельных запросов в информационной системе 1С. Решение предоставляется бесплатно, просьба оценить и ждем Ваших комментариев.
Описание: http://softpoint.ru/article_id4224.htm

Отвечу на все вопросы в этой ветке
97 sapphire
 
11.02.13
13:31
(94) С чего бы это?
98 mistеr
 
11.02.13
13:32
(86) Я просил пример отчета, который имеет смысл ускорять таким способом, и который получает выигрыш от распараллеливания. В идеале - отчет для типовой конфы, чтобы можно было повторить и увидеть результат. Есть такое?

Если нет, то хотя бы описание словами. Был такой-то отчет по таким-то данным в такой-то конфе, выполнялся столько-то, распараллелили так-то, получили столько-то. Хотя бы так можете? Нет? Тогда извините, а с чем же вы пришли?

Как в анекдоте получается. "Дорогая, ты ж у меня умная, придумай сама что-нибудь".
99 mistеr
 
11.02.13
13:33
(98) -> (88)
100 gallam
 
11.02.13
13:34
(94) В большинстве сложных запросов 1С всегда множество запросов SQL (заполнение виртуальных таблиц, и прочее).
101 sanfoto
 
11.02.13
13:36
(98)  mistеr
>Был такой-то отчет по таким-то данным в такой-то конфе,
>выполнялся столько-то, распараллелили так-то, получили
>столько-то...
+
хотелось бы циферки, например в % (процентах)
102 sapphire
 
11.02.13
13:36
(101) И что это даст?
103 H A D G E H O G s
 
11.02.13
13:37
(95) Это совсем другое, нежели "собрать все в один запрос".
104 H A D G E H O G s
 
11.02.13
13:37
(94) Где это написано?
105 sanfoto
 
11.02.13
13:37
(100) gallam
тоже +
И даже больше "ПРАКТИЧЕСКИ ЛЮБОЙ запрос на Языке 1С"  = "нескольким SQL"
106 H A D G E H O G s
 
11.02.13
13:38
Готов поспорить на шнурок от USB, Aleksey - бывший семерошник.
107 Aleksey
 
11.02.13
13:38
(97) Ты у меня спрашиваешь? Я типовые не пишу
108 sapphire
 
11.02.13
13:39
О кстати, а ТС предупреждает о "забористости" своего отчета на больших данных?

А то пользователь наш настолько умен, что могет и кнопочку-то нажать...
109 Aleksey
 
11.02.13
13:40
(104) Что такое парадигма прочитал? Вот там и написано
110 gallam
 
11.02.13
13:40
(98)
Может мы конечно под различными углами все видим, но:...

Приведу пример:
Есть Visual Studio , предоставляется API для программирования,
пример использования и программист адаптирует к своей задачи.

В статье сказано в пункте эффект (у нас получалось для 3-х запросов) ускорение в 2,5 раза.

P.S> Вот и предоставлено API и пример. Если надо адаптировать к вашим задачам (к вашему отчету) - то надо анализ вашего отчета, применимость подтвердить.
111 Aleksey
 
11.02.13
13:41
(106) В 7-ке как раз с этим порядок
112 H A D G E H O G s
 
11.02.13
13:42
(111) Я вас за версту чую.
113 Aleksey
 
11.02.13
13:43
(112) Так и хочется спросить. "И чё?"
114 sapphire
 
11.02.13
13:44
(112) Да ты нюхач :)
115 Aleksey
 
11.02.13
13:45
Нет, ну правда, от того что я бы не знал 7-ки писать всё в один запрос перестала быть парадигмой?
116 sapphire
 
11.02.13
13:47
(110) Ладно, что Вы так обижаетесь?
Идея хорошая, кто знает где использовать, тот по-пробует.
У меня, например, не прокатит из-за ограничений на серверах.

А тем, кто тут так неимоверно крут - пусть напишут код на tSQL, который выполнит 2 запроса параллельно.
117 H A D G E H O G s
 
11.02.13
13:48
(115) Писать все в один запрос и не было парадигмой.
118 mistеr
 
11.02.13
13:58
(110) Ты пойми, если хочешь привлечь внимание к своей разработке, покажи ее с выгодной стороны. Подготовь такой пример, выложи, Тогда только кто-то попробует, появятся вопросы по существу. А так никто не будет специально ломать голову "а где бы мне это применить".

Это что касается рядовых одинесников. С теми же, кто готов лезть в дебри SQL и оптимизации, надо общаться на соответствующем уровне. К чему ты, как видно, тоже не готов.
119 Aleksey
 
11.02.13
14:06
(117) А что же это такое?
120 sapphire
 
11.02.13
14:19
(118) Фигасе :)
так никто не будет специально ломать голову "а где бы мне это применить". Это что касается рядовых одинесников.

Т.е. быдлокодеров, кои вообще ни в платформе, ни в чем другом не смыслят. Мдя.
121 gallam
 
11.02.13
14:24
(116) А какие ограничения у серверов?
122 sapphire
 
11.02.13
14:56
(121) Ну, на игрушечном можно развернуть, а для боевых серверов - надо согласовывать это со многими.....
123 sapphire
 
11.02.13
15:07
(121) Кстати, интересно сравнить данные при использовании этой компоненты и принудительного использование параллельного плана выполнения запросов в её отсутствие.
124 mistеr
 
11.02.13
15:08
(120) Не передергивай. В 1С, также как и в яве, в дотнете и прочем, полно людей разного уровня. Все они востребованы на своем месте, так или инача.
125 sapphire
 
11.02.13
15:12
(124) Да ну? В Яве-то? В java такие люди не задерживаются, про .NET поверить можно, но там таки мозг нужен, в 1С же мозг не всегда востребован.
126 sapphire
 
11.02.13
15:14
(118)
>>С теми же, кто готов лезть в дебри SQL и оптимизации, надо общаться на соответствующем уровне. К чему ты, как видно, тоже не готов.

Откуда дровишки?
127 crasler
 
11.02.13
15:26
(0) Насколько я помню, фирма 1С распространяет лицензию сервера из расчета одна лицензия на один процессор, тобиш сколько не параллель процессов всё равно будет выполняться на одном физическом процессоре или по крайней мере это зависит от ОС сервера (если есть автоматическое раскидывание процессов по процессорам/ядрам)
Другой аспект. Если запросы связанны с одними и теми же таблицами в БД то как никрути будут срабатывать блокировки (если в одной сессии) и получиться примерно одно время если посылать запросы последовательно, а может быть ещё хуже!
128 AaNnDdRrEeYy
 
11.02.13
15:32
(0) На сайте есть инструкция по установке но нет инструкции по удалению, как после тестов все удалить безболезненно и без последствий?
129 crasler
 
11.02.13
15:38
(128) В установке и удалении программ (Программы и компоненты) не прописалось? Если да то наверняка так!
130 gallam
 
11.02.13
15:39
(127) Про лицензии не понял вообще...
Вы абсолютно неправы.
- "Если запросы связанны с одними и теми же таблицами в БД то как никрути будут срабатывать блокировки (если в одной сессии)" - если в одной сессии, то блокировок не будет (с кем конфликтовать?)
- " получиться примерно одно время если посылать запросы последовательно, а может быть ещё хуже!" - вот где у людей логика!!!

(128) С точки зрения загрузки библиотеки (не загружайте ее и все работает в штатном режиме)
Если с точки зрения кода - то посмотрите внимательно на служебные процедуры и вы поймете, что они универсальны для 2 режимов (нет компоненты работаю как и раньше последовательно, есть - параллельно).
131 crasler
 
11.02.13
16:00
(130) Про лицензии видимо не так понял сотрудников 1С (почему то у них процессор и сервер один смысл)

СУБД сама разве не параллелит запросы?
Настоящий прирост можно получить только если запаралелить сам код 1С и релизовать что-то вроде блокировок когда идет чтение или изменение одних данных. Блокировки объектов немного не то.
132 gallam
 
11.02.13
16:04
(131)
СУБД параллелит, когда имеет возможность.
Но здесь как раз очень часто параллелизм нельзя использовать.
В решении мы и предлагаем паралеллить выполнение двух запросов 1С, как наиболее длительных в отчете.
133 sapphire
 
11.02.13
16:04
(131)
>>СУБД сама разве не параллелит запросы?
Может запараллелить, а может и не: необходимо смотреть план выполнения запроса.
134 МегаБум
 
11.02.13
16:07
(0) почему не для семерки?
135 sapphire
 
11.02.13
16:09
(132)
>>В решении мы и предлагаем паралеллить выполнение двух запросов 1С, как наиболее длительных в отчете.

Ну... млин.. щас польется.. :(
136 sapphire
 
11.02.13
16:10
(134) для неё тоже можно использовать
137 sapphire
 
11.02.13
16:10
+(136) только в паре с 1С++, но тогда надо ставить на каждую р/с.
138 gallam
 
11.02.13
16:11
(134) В семерке можно использовать в ADO.
1С 77 - это ODBC во-первых, а во вторых: там длительность запроса обусловлена не столько неоптимальностью текста, сколько большим количеством маленьких запросов.

(135) ))
139 sapphire
 
11.02.13
16:12
(138) Хотя, вот с 1С++, могут возникнуть проблемы...
140 gallam
 
11.02.13
16:13
(139) Я умышленно говорю ADO)
141 gallam
 
11.02.13
16:14
+ Но можно без проблем реализовать и для 77, но для 1С 8 - актуальнее
142 crasler
 
11.02.13
16:15
(132)
>> В решении мы и предлагаем паралеллить выполнение двух запросов 1С, как наиболее длительных в отчете.

Отчеты конечно нужная вещь, но всё-таки параллельные вычисления больше необходимы именно при расчетах, например расчет зарплаты, если бы можно было запаралелить данный расчет.
Планируется ли разработка для таких задач?
143 gallam
 
11.02.13
16:18
(142) планируется.
Как раз параллельный расчет ЗП, например, для компании с большим количеством персонала. Он очень подходит для этого.
144 sapphire
 
11.02.13
16:19
(142) Что мешает там параллелить?
145 crasler
 
11.02.13
16:25
(144) Речь не о 2-х трех одновременных процессах, а допустим 15-30, и каждый процесс расчитает данные по сотруднику!
Такое можно реализовать без танцев с бубном? Особенно если требуется расчет в интерактивном режиме!
146 МегаБум
 
11.02.13
16:27
(145) зарплату надо рассчитывать не раз в месяц, а сразу-же по мере ввода, всего-то и делов.
147 gallam
 
11.02.13
16:30
(146) Это если алгоритм простой
и нарушение последовательности нет.
148 sapphire
 
11.02.13
16:33
(146) Ишь та какой, а не всегда так можно сделать.
149 mistеr
 
11.02.13
16:37
(145) Это как? O_O 15-30 процессов в интерактивном режиме...
150 Evrepid
 
11.02.13
16:39
2(0) Простите это не параллельные вычисления, это выполнение запросов только.
А Нуралиев обещал полную параллельность осуществить. правда когда? :)
151 МегаБум
 
11.02.13
16:39
(147) последовательность... Пита на вас нет ))
(148) странно, а не в 1С программах учета зарплаты  даже не в курсе, что так делать нельзя и делают.
152 crasler
 
11.02.13
16:41
(149) Пользователь открыл "Начисление зп" и нажал кнопу "Расчитать", а ему спустя пару минут все расчиталось, а не пришлось ждать десятки минут!!!
153 МегаБум
 
11.02.13
16:43
(152) неверный подход, когда целый месяц процессор простаивает, и только раз в месяц даем ему про$раться
154 crasler
 
11.02.13
16:45
(153) Может потребоваться если нужно быстро пересчитать по какому-то подразделению и т.п.
А так конечно должно расчитываться в фоне, но судя по тому как это реализовано в УПП...
155 gallam
 
11.02.13
16:47
(154) +1
156 Evrepid
 
11.02.13
16:51
2(154) Уже обсуждалось фигову тучу раз.
Считайте по отделам. Затраты процессора в пределах нормы, возможность параллельного ввода документов, минимальная нагрузка при пересчетах.
Нафиг остальные изыски?

Как любит говорить народ: Автоматизация бардака приведет к автоматизированному бардаку.
157 gallam
 
11.02.13
16:51
(150) Вы наверное перепутали - Нуралиев обещал полную параллельность работы пользователей (минимум блокировок), а тут параллельное выполнение последовательных команд (запросов 1С).
158 mistеr
 
11.02.13
16:52
(152) Десятки минут? Это на весь Газпром что ли?
159 Evrepid
 
11.02.13
16:52
2 (157) Ну не... Нуралив и Рупасов много чего обещали. В частности параллельность и многопотоковость...
160 gallam
 
11.02.13
16:54
(156) " Затраты процессора в пределах нормы, минимальная нагрузка при пересчетах " - как раз при параллелизме идет повышенная нагрузка на ресурсы (в идеале по максимуму), но за счет этого минимальное время выполнения.
161 gallam
 
11.02.13
16:56
(158) Такое тоже очень часто бывает: http://www.softpoint.ru/info_id94.htm
162 Evrepid
 
11.02.13
17:00
2(156) Вы поймите, что как уже говорили выше, мощность серверов используется не одномоментно, а растянуто во времени.

Вот пример: 2 землекопа должны за 10 дней выкопать траншею,
1 копает каждый день, 2-й в последний день. кто запарится быстрее? :(
163 Evrepid
 
11.02.13
17:00
2(161) сервер нужен менее мощный в этом случае и все будете успевать. :)
164 Evrepid
 
11.02.13
17:03
это хорошо сказано:
Ожидаемый эффект по производительности:
  Не стоит ожидать большого эффекта от распараллеливания запросов 1С для любых аппаратных ресурсов. На наш взгляд наиболее эффективно распараллеливание, если вы обладаете многоядерным сервером и достаточно производительной СХД.
  Количество потоков определяется обычно количеством ядер и рассчитывается эмпирически на тестовых прогонах.
  Нам на практике удалось уменьшить длительность выполнения и получение выборки 3-х запросов в 2,2 – 2,5 раза. При этом надо помнить, что выполняя параллельно N запросов, требуется заранее спланировать возможное увеличения оперативной памяти rphost.exe для всех выборок параллельно выполняющихся запросов.
165 gallam
 
11.02.13
17:08
(163) надеюсь вы прошли по ссылке и видели показатели и количество сотрудников.
Далее по вашему примеру:
Не все обычно так просто.
Есть сотрудник, он работает каждый день.
Дальше есть менеджер, ЗП у него зависит от того, как хорошо работают сотрудники (например, в течение недели) и от этого различные схемы. И прочее/прочее.

А если у сотрудников разл. коэффициенты.

Вывод: у Вас в практике были только несложные расчеты ЗП.
166 МегаБум
 
11.02.13
17:13
(161) 1 час 40 минут это тоже слишком много, если считать сразу, то вообще ждать не надо. Вообще документа "расчет зарплаты" не должно существовать, сам принцип неверный.
167 Aleksey
 
11.02.13
17:22
(143) считать паралельно по каждому сотруднику?
168 gallam
 
11.02.13
17:23
(167) конечно (если возможно), но ограничить количество потоков в соответствие с вашими ресурсами.
169 mistеr
 
11.02.13
17:24
(161) Охренеть.
170 sapphire
 
11.02.13
17:25
(165) О кстати, о параллелизме.

There is an undocumented trace flag 8649 to set the cost overhead of parallelism to 0. This may provide some relief, but is not a full solution. You can use it in a query hint in the form OPTION(querytraceon 8649).

Источник:
https://connect.microsoft.com/SQLServer/feedback/details/714968/provide-a-hint-to-force-generation-of-a-parallel-plan#details
171 FoxFox
 
11.02.13
17:29
(146) Если б так просто было в реальности.. Например, у нас как правило, по окончании месяца в течение очень короткого времени несут всякие проценты, показатели, табеля, без которых невозможен полный расчет зп, и в итоге на обсчете нескольких тысяч сотрудников программа встает колом из-за взаимоблокировок. Частично разрулили управляемыми блокировками, но где-то местами и они не помогают..
172 МегаБум
 
11.02.13
17:50
(171) насчет блокировок при совместной работе - если расчетчиков несколько, нет никакого смысла им сидеть в одной базе, все равно каждый отвечает за определенное подразделение/отдел. И зачем запускать обсчет нескольких тысяч сотрудников, все равно в каждый момент времени расчетчик работает с каким-то определенным сотрудником или отделом, вот сразу же и рассчитывать все что можно, и пофиг, к примеру, что вместо просто НДФЛ будет НДФЛ в части оклада, НДФЛ в части премии, НДФЛ в части больничного и т.п.
173 FoxFox
 
11.02.13
18:41
(172) В том-то и дело, что на каждый отдел свой документ, но в нем может быть сколько-то тысяч строк (внутри отдела может туева хуча совмещений), которые при записи в регистр расчета блокируют таблицу напрочь, отрубая вычисления других расчетчиков (а конфа устроена так, что в процессе расчета она постоянно пишет наборы записей, считает, снова пишет и т.д.).
Плодить распределенные базы тоже не оч хороший вариант, поскольку кадровиками параллельно могут довводиться  всяческие вытеснения, перемещения и пр. движения, и тут еще надо не профукать, все ли данные для расчета по сотруднику пришли из другой базы.
174 serffer
 
11.02.13
20:00
(0) Дорогой автор, Вы видели в СКД у источника данных есть путь к Кластеру серверов( или еще както он называется). вроде сейчас он не работает.
но вот 8.3(сам не тестил) добавились фичи в кластере. и сдается мне что на 8.3 "Объединение" наборов данных будет(сейчас или в скором времени) работать параллельно через этот механизм.

одним словом - ГодаНеПройдет
175 gallam
 
11.02.13
21:29
(174) кластер 1с или Ms SQL?
И конечно не понятно описание - что то есть, сам не видел и не тестировал...
Ещё раз повторюсь - предлагается вариант для реализации параллелизма в 1с, а не решение всех проблем (хотя было бы супер).
176 sanfoto
 
12.02.13
08:10
(175) gallam,
Про параллельное выполнение запросов безусловно "+".

Вот кстати вопрос по смежной теме что там у Вас с "Кластером Софтпоинт"? - удалось достичь скорости сервера "все в одном"? )).

Уж простите за подковырку - но даже Oracle в RAC -не удалось масштабировать больше ДВУХ серверов (коэф 0.95) - без значительного падения коэф. масштабирования.
Масштабирование имеется ввиду ПОЛНОЕ а не ГОРИЗОНТАЛЬНОЕ.
177 YHVVH
 
12.02.13
08:29
(0) не понятно не фига, чем от фоновых отличается.
178 sanfoto
 
12.02.13
08:31
(177) YHVVH
с фоновыми ВЫЯ...СЯ приходится, а здесь типо все проще))
179 YHVVH
 
12.02.13
08:31
(178) понятно теперь
180 gallam
 
12.02.13
09:32
(177) Кластер удалось реализовать
почитать можно:
http://www.softpoint.ru/products_id15.htm
http://www.softpoint.ru/products_id335.htm

Это два разных решения.
, в феврале-марте проводим официальное тестирование на мощном оборудовании, от его результатов многое зависит.
После первичного тестирования 70-80% нагрузки можно распределить для 1С 8.

p.S> 0,95 - очень хороший результат.
181 Fragster
 
гуру
12.02.13
09:33
блин, а я на нодежс диспетчер потоков пишу...
182 Fragster
 
гуру
12.02.13
09:33
для 1с :)
183 gallam
 
12.02.13
09:33
(178)
+1 А также быстрее и меньше ресурсов.
184 gallam
 
12.02.13
09:58
(181) А для какой задачи?
185 Fragster
 
гуру
12.02.13
09:59
(184) в общем случае - для всего, что не блокирует друг друга, например для восстановления последовательности или там массового удаления/добавления записей в регистре и т.п.
186 gallam
 
12.02.13
10:08
(185) Уже обсуждалась в ветке основная проблема удаления/добавления записей регистра - транзакция.
По поводу восстановления последовательности - тоже писали, можно применить, когда ресурсы пересечения распределены равномерно по ряду групп (как раз для таких вещей, как восстановление последовательности для партионки - это сложнореализуемо).
187 Fragster
 
гуру
12.02.13
10:12
(186) так как раз и диспетчер нужен, когда группы неравномерные
188 Fragster
 
гуру
12.02.13
10:13
очередь с с графом зависимостей
189 gallam
 
12.02.13
10:18
(187) Я имел в виду, что когда группы неравномерные, например, одна 95% и остальные 5%, то смысла большого в параллельном выполнении нет (эффект максимальный - длительность 5%).
190 Fragster
 
гуру
12.02.13
10:21
(189) ну, тут уже надо курить, чтобы групп было больше, например делать из подчиненного РС неподчиненный и т.п.
191 Evrepid
 
12.02.13
12:21
2(165) Ошибаетесь.
И проценты от выработки были и просто процентов от оклада, и по табелю и от процентов продаж и т.д.
192 extrim-style
 
12.02.13
16:31
(0) а увеличить быстродействие EKLib.dll с помощью этой технологии нельзя? Или распараллелить то, что на входе?
193 gallam
 
12.02.13
16:43
(192) Честно скажу, что с EKLib.dll почти не работали. Если скинете более подробную информацию (код 1С для нее), описание задачи, и будут после анализа обнаружены запросы для параллельного выполнения, то можно доработать.
194 gallam
 
12.02.13
16:44
+ Если EKLib.dll = ЕК Софт
195 extrim-style
 
12.02.13
16:48
(194) конечно "равно", поэтому и спрашиваю.
Ясно. Вобщем тема не раскрыта. Просто удочку закинул.
196 extrim-style
 
12.02.13
16:50
(193) сорри, я вас перепутал с ними...