Имя: Пароль:
1C
1С v8
Как можно ускорить проведение большого числа документов
,
0 Сергиус
 
10.04.13
15:28
Есть порядка 100.000 документов(тип один и тот же), каждый документ делает 1 движение по регистру накопления, объединять документы нельзя. Если делать в цикле проведение каждого документа, это занимает порядка 1,5 часа. Есть какие то способы ускорить этот процесс - и если да, то какие?
1 Fragster
 
гуру
10.04.13
15:30
проводи параллельно
2 Сергиус
 
10.04.13
15:31
(1) а можешь подробней об этом?
3 Fragster
 
гуру
10.04.13
15:31
потенциальное ускорение можно проверить с помощью v8: Многопоточный тест производительности 1с
4 Fragster
 
гуру
10.04.13
15:32
(2) одновременно по неблокирующим комбинациям измерений таблиц проводишь несколькими сеансами
5 zzerro
 
10.04.13
15:33
100000 документов за 1.5 часа не так уж и долго, 18 с половиной документов в секунду.
6 Fragster
 
гуру
10.04.13
15:37
(5) потенциальное ускорение за счет параллельного проведения может достигать десятков раз. правда оно "потенциальное", каждый случай сильно уникальный, и алгоритмы - тоже.
7 Обработка
 
10.04.13
15:37
(0) Важно учитывать что происходит в модуле проведения?
Если режимы оперативное и неоперативное проведения?

А что мешает провести их ночью если нельзя днем? Или проблема не в этом?
8 Сергиус
 
10.04.13
15:38
(4)Т.е. на каждую итерацию цикла по массиву этих документов, создается фоновое задание, которое проводит каждый документ? Я так тебя понял или нет?
9 Fragster
 
гуру
10.04.13
15:40
(8) сами фоновые задания создаются долго (намного медленнее, чем 1/18 секунды), так что правильнее - создать несколько списков документов и скормить их заданиям.
10 Fragster
 
гуру
10.04.13
15:40
можно просто обработку, которая проводит по списку, несколько сеансов и в каждом - проводить свой список
11 unregistered
 
10.04.13
15:41
(0) Не выполнять проведение документов.

Сформировать наборы записей по регистру и их записывать.
Если перепроводятся ранее проведенные документы, то можно еще и замутить проверку на изменение получившегося набора по сравнению  с имеющимся - типа, если не изменился, то не делать запись.
12 Fragster
 
гуру
10.04.13
15:41
(11) да. но все равно можно ускорить за счет параллельного выполнения :)
13 Сергиус
 
10.04.13
15:42
(11)Для формирования набора записей, нужно устанавливать отбор по регистратору - а это все равно приводит к поэлементному перебору.
14 Сергиус
 
10.04.13
15:43
+13 или есть какой то иной способ?
15 Fragster
 
гуру
10.04.13
15:43
(13) просто можно снизить количество выполняемого кода. Ну и сама таблица документа и его ТЧ не записывается.
16 НЕА123
 
10.04.13
15:48
транзакцию порциями по 1000, например?
17 НЕА123
 
10.04.13
15:49
расчет итогов убрать.
18 Fragster
 
гуру
10.04.13
15:50
(17) +
19 Сергиус
 
10.04.13
16:03
(17) Это можно сделать программно(через код)?
20 НЕА123
 
10.04.13
16:07
УстановитьПериодРассчитанныхИтогов кури.
я сам не пользовался.
21 НЕА123
 
10.04.13
16:08
(19)
может транзакции достаточно.
22 Fragster
 
гуру
10.04.13
16:09
(21) транзакция не поможет
23 Ranger_83
 
10.04.13
16:12
(0) по железу что у тебя?какая конфигурация сервера 1с?
24 unregistered
 
10.04.13
16:13
(21) см (22) +1 использование транзакции не ускорит проведение.
25 Сергиус
 
12.04.13
14:51
С проведением разобрался вроде, спасибо за советы. Теперь вопрос стоит так - каким способом можно удалить из базы примерно такое же количество документов(около 80.000). Если делать стандартным удалением в цикле, то это занимает порядка 1,5 часов. У всех документов есть движения по РН. Какие есть способы наиболее быстрого удаления?

P.s. удаление происходит в транзакции, порции пробовал и 100 и 1000.
26 Fragster
 
гуру
12.04.13
14:54
выключаешь итоги удаляешь в 4 потока
27 Fragster
 
гуру
12.04.13
14:55
транзакции нафиг
28 sda553
 
12.04.13
14:55
Отключи расчет итогов. Проведи. Потом пересчитай итоги
29 unregistered
 
12.04.13
14:56
(25) >>  удаление происходит в транзакции

бессмысленно. См. (22): транзакция практически не дает ускорения.
30 Xatori
 
12.04.13
14:58
Мне кажется что в данном случае, поскольку это разовое, автор больше времени тратит на обсуждение вопроса производительности, чем нежели просто взять и сделать, а это нерационально :)
31 Сергиус
 
12.04.13
14:58
(28) Как отключить расчет итогов? С помощью УстановитьПериодРассчитанныхИтогов?
32 Fragster
 
гуру
12.04.13
14:58
(31) установитьИспользованиеИтогов УтановитьИспользованиеТекущихИтогов
33 Сергиус
 
12.04.13
15:00
(32) а при записи это тоже поможет ускорить процесс по идее?
34 unregistered
 
12.04.13
15:00
(30) >>  нежели просто взять и сделать

Учитывая (25), автор уже давно всё сделал. У него уже и результаты есть - 1,5 часа на 80 КДокументов.

>> поскольку это разовое

Если было бы разовое автор бы не предъявлял претензии к скорости.
35 Fragster
 
гуру
12.04.13
15:02
(33) если алгоритмов проверки остатков никаких нет - то да
36 unregistered
 
12.04.13
15:07
(33) При записи чего?

Отключать итоги имеет смысл при выполнении массовых (десятки тысяч) операций записи/удаления записей в регистре(ах).
37 pessok
 
12.04.13
16:28
а если просто перезаписать набор РН, без перепроведения документов в цикле?
38 Dethmont
 
12.04.13
16:40
И можно еще
ДокументОбъект.ОбменДанными.Загрузка = истина;
39 gallam
 
12.04.13
17:35
(0) принципиально ускорить можно только запуском в параллельных потоках
40 _Atilla
 
12.04.13
18:09
(0) Темп закидываешь в RAMdisk
41 masenshi
 
12.04.13
19:09
(11) +1
(0)
А вы уверены,  что нужно их проводить? Как часто? Каждые 1,5 часа?
Замер производительности.