|
Как можно ускорить проведение большого числа документов | ☑ | ||
---|---|---|---|---|
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 часа? Замер производительности. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |