IE2017

Многопоточное удаление объектов

Администрирование - Чистка базы

Обработка предназначена для ускорения процедуры удаления объектов

Обработка предназначена для ускорения процедуры удаления большого количества объектов.

Не претендую на изобретение велосипеда, но суть примерно такая: запускаем дочерние процессы обработки (сама себя) по количеству ядер процессора.

В итоге в файловом режиме реальный прирост в 2 раза(!) и более. На SQL - 15%

Зачем это нужно? Предположим, у вас база, в которой штук 10 юриков. Учредители, разбегаясь, решили поделить бизнес, и вам надо в базе удалить 9 организаций из 10. Или вы решили свернуть (схлопнуть) базу. В общем, не суть: кто сталкивался с задачей удаления большого количества объектов, тот меня поймёт.

Писалась под 8.3 (только толстый клиент!!!), но на скорую руку добавила поддержку 8.2 (кому надо, код открыт, разберетесь).

При первом запуске обработки нужно её же указать в окошке "Путь к обработке".

Скачать файлы

Наименование Файл Версия Размер
MultithreadingDeleting.epf
.epf 13,63Kb
02.06.16
27
.epf 1.0 13,63Kb 27 Скачать

См. также

Комментарии
1. aspirator 23 (aspirator23) 303 11.06.16 15:32 Сейчас в теме
Странно, что только в 2 раза. Аналогично делал на SQL - ускорение в количество фоновых процессов. Не точно, но почти. Т.е. на 10 примерно получалось в 7-8 раз.
2. Наталия Мастербатова (zzz_natali) 56 13.06.16 15:29 Сейчас в теме
(1) aspirator23, Ну, если по-чесноку, то статистику не собирала. Субъективно прикинула ... к носу - вроде в 2 с небольшим раза быстрее.
3. Slava Admin (Sl@v@) 20.06.16 01:21 Сейчас в теме
На УТ 3.0 для Украины 1С 8.3.4 выдает -
{Форма.Форма.Форма(141)}: Получение элемента по индексу для значения не определено
МассивФорма[Сч-1][ИмяРеквизита] = ЭтотОбъект[ИмяРеквизита];
Как можно побороть?
4. Наталия Мастербатова (zzz_natali) 56 20.06.16 06:07 Сейчас в теме
(3) Sl@v@,
КАк надыбаю УТшку для Украины, гляну. Вы точно уверены, что ваша конфигурация запускается в толстом клиенте?
5. Slava Admin (Sl@v@) 20.06.16 22:38 Сейчас в теме
ДД.
Да, в Толстом клиенте обычные формы.
Инсталляция конфигурации - https://yadi.sk/d/T-ypcOGosVFzc
Cf конфигурации - https://yadi.sk/d/F8J9CpDSsVJQ8
6. Наталия Мастербатова (zzz_natali) 56 21.06.16 11:03 Сейчас в теме
(5) Sl@v@,
К сожалению у вас всё равно режим запуска Управляемый:

У меня не стояло задачи писать под управляемые формы. Возможно в обозримом будущем допишу, если будет свободное время.
как выход из ситуации для вас вижу следующий порядок действий:
1. Снимаете конфу с поддержки
2. Меняете основной режим запуска на Обычный.
3. Производите необходимое удаление объектов с помощью моей обработки
4. Снова меняете основной режим запуска на Управляемый(или оставляете в обычном режиме)
5. При желании можно снова поставить конфигурацию на поддержку
7. Александр Крынецкий (echo77) 740 09.07.17 10:35 Сейчас в теме
(6) Не надо снимать с поддержки. Надо просто в параметрах запуска 1С дописать /RunModeOrdinaryApplication
https://helpf.pro/faq83/view/1735.html
8. Xer shi (Xershi) 274 09.07.17 12:30 Сейчас в теме
(7) или же в режиме отладки выбрать запуск обычное приложение, но не факт что взлетит.
zzz_natali; +1 Ответить
9. Наталия Мастербатова (zzz_natali) 56 09.07.17 17:58 Сейчас в теме
(7) У него какая-то хитромудрая конфа. У мя не получилось её толкнуть в режиме ранмодеординари
10. Александр Крынецкий (echo77) 740 10.07.17 15:23 Сейчас в теме
У меня все запускается
Прикрепленные файлы:
11. Наталия Мастербатова (zzz_natali) 56 10.07.17 16:03 Сейчас в теме
(10) Х.з. на тот момент может мне какую другую редакцию конфы пихнули.
Больше года уже прошло...
"Не жнаю, вопчем: само приползло" (с) из анека
12. Slava Admin (Sl@v@) 15.07.17 08:00 Сейчас в теме
Доброе время суток.
У меня тоже запускается в обычном режиме из конфигуратора, но после выполнить выдает старую ошибку -
"{Форма.Форма.Форма(141)}: Получение элемента по индексу для значения не определено
МассивФорма[Сч-1][ИмяРеквизита] = ЭтотОбъект[ИмяРеквизита];
"
Прикрепленные файлы:
13. Наталия Мастербатова (zzz_natali) 56 20.07.17 15:44 Сейчас в теме
(12) Попробуйте заремить 141ю строчку - должно заработать.
14. Slava Admin (Sl@v@) 21.07.17 01:14 Сейчас в теме
Заремил, но не сильно продвинулся в многопоточном удалении -
"Ошибка разделенного доступа к информационной базе"
Прикрепленные файлы:
15. Наталия Мастербатова (zzz_natali) 56 21.07.17 07:01 Сейчас в теме
(14) Давайте с самого начала. Ошибка проявляется только на одной базе или на всех(даже если взять обычную бухню-демку)?
ЗЫ. Уехала поливать огурцы. На след неделе продолжим...
16. Slava Admin (Sl@v@) 21.07.17 21:30 Сейчас в теме
Я только на этой пробовал.
17. Sergey Andreev (starik-2005) 1045 22.07.17 10:30 Сейчас в теме
(1)
Аналогично делал на SQL - ускорение в количество фоновых процессов.
Имеется ввиду на клиент-серверной архитектуре? На скуле это делается в 1 поток раз в 1000000000 быстрее, чем на 1С.
Тут что-то есть об этом. Если UPDATE поменять на DELETE, а в WHERE прописать _Marked = 1, то удалится только в путь )))
18. Наталия Мастербатова (zzz_natali) 56 23.07.17 19:55 Сейчас в теме
(16) Может конфа базовая? Не дает несколько подключений к базе...
19. Наталия Мастербатова (zzz_natali) 56 24.07.17 11:21 Сейчас в теме
(17)
У вас есть готовый универсальный T-SQL скрипт по непосредственному удалению помеченных на удаление объектов? Была бы очень признательна.
20. Sergey Andreev (starik-2005) 1045 24.07.17 14:54 Сейчас в теме
(19)
У вас есть готовый универсальный T-SQL скрипт
Т.к. имена в разных базах разные, то универсальный скрипт достаточно проблематично запилить (но можно). Основная проблема - удаление движений в регистрах по удаленным объектам. Ну и 1С может поменять структуру БД, что может привести к неработоспособности скрипта.

Если данные нужно удалить из небольшого количества связанных таблиц, то скрипт написать будет весьма простой задачей. получаете имена таблиц и имена табличных частей. Удаляете данные основной таблицы по признаку _Marked = 1, удаляете табличные части по NULL в соединении с основной таблицей, удаляете данные регистров по NULL в соединении с регистратором. Если регистраторов много, то поле типа "RTRef " содержит номер таблицы, т.е. добавляете условие по этому полю и номеру документа. 10 минут скрипт писать.
Оставьте свое сообщение