|
Удаление элементов справочника | ☑ | ||
---|---|---|---|---|
0
YHVVH
24.12.12
✎
14:12
|
Можно ли несколькими фоновыми заданиями удалять РАЗНЫЕ элементы справочника.
т.е. разбиваю на порции, запихиваю в массивы, запускаю фоновые задания на каждую порцию, передаю туда соответствующий массив элементов. В обработке задания перебираю массив и удаляю элементы методом Удалить(). Когда использую около 10 фоновых заданий появляются ошибки (в случае 1-4 заданий работает всегда, в случае 5-9 через раз) Ошибка при вызове метода контекста (Удалить) по причине: Конфликт блокировок при выполнении транзакции: Неустранимый конфликт блокировок" Вопрос, как удалять элементы в "несколько потоков"? |
|||
1
YHVVH
24.12.12
✎
14:12
|
+(0) в базе пользователей нет.
|
|||
2
ДенисЧ
24.12.12
✎
14:13
|
Блокировку управляемую накладывай...
|
|||
3
YHVVH
24.12.12
✎
14:15
|
(2) попробую щас
|
|||
4
YHVVH
24.12.12
✎
14:33
|
(2) а в какой момент устанавливать эту блокировку?
|
|||
5
YHVVH
24.12.12
✎
14:33
|
в фоновом задании или непосредственно перед вызовом ?
|
|||
6
ДенисЧ
24.12.12
✎
14:34
|
(4) когда у тебя получен набор элементов к удалениб
|
|||
7
ДенисЧ
24.12.12
✎
14:34
|
в задании
|
|||
8
YHVVH
24.12.12
✎
14:34
|
(7) не получается, тоже самое
|
|||
9
vmv
24.12.12
✎
14:36
|
мож там кофликт пересечения, т.е. разные порции(задания) пытаються удалить один и тот же элемент
|
|||
10
YHVVH
24.12.12
✎
14:36
|
(9) нет
|
|||
11
YHVVH
24.12.12
✎
14:38
|
вот код
&НаСервере Процедура УдалитьНафигФоново(Знач МЗаписи) Экспорт Для каждого эл ИЗ МЗаписи Цикл мС = Новый Массив; мС.Добавить(эл); Рез = НайтиПоСсылкам(мС); БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировки = БлокировкаДанных.Добавить("Справочник.НоменклатураПоставщиков"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; ЭлементБлокировки.УстановитьЗначение("Ссылка", эл); БлокировкаДанных.Заблокировать(); Об = эл.ПолучитьОбъект(); Если Рез.Количество()=0 тогда Об.Удалить(); иначе Об.УстановитьПометкуУдаления(Истина); КонецЕсли; КонецЦикла КонецПроцедуры |
|||
12
vmv
24.12.12
✎
14:39
|
попробуй работать с порциями через запрос с термом "ДЛЯ ИЗМЕНИНИЯ", тогда каждая порция будет захватывать "свой" набор данных, хотя я не спец по блокам, Гилева зови в помощь, ну и СУБД озвуч, тож не лишнее, если пострги, то не взлетит)
|
|||
13
YHVVH
24.12.12
✎
14:41
|
ms sql , на счет изменений можно попробовать , но боюсь это только решит проблему - захватывать "свой" набор данных.
|
|||
14
vmv
24.12.12
✎
14:42
|
(11) в подобном коде у меня была трабла на пустом месте, оазалось что текущая итерация идет быстрее, чем завершаться все операции по удалению в текущей - фантастически но было, правда на 8.1. ставил в цикле в начале итерации паузу
С тех пор я редко пользуюсь менеджерами для удаления |
|||
15
YHVVH
24.12.12
✎
14:43
|
(14) С тех пор я редко пользуюсь менеджерами для удаления
не понял, поясни, а чем пользуешься? |
|||
16
vmv
24.12.12
✎
14:43
|
я конечно туповат, но это не понимаю
Если Рез.Количество()=0 тогда Об.Удалить(); иначе Об.УстановитьПометкуУдаления(Истина); КонецЕсли; есть матерые, разъясните |
|||
17
YHVVH
24.12.12
✎
14:44
|
(16) а что не понятно? анализирую если есть ссылки то помечаю на удаления, если нет то удаляю.
|
|||
18
vmv
24.12.12
✎
14:46
|
(17) я бы помечал на удаление все безусловно, ибо никто не ведает, что твориться с БД при непосредственном удалении записи, возможно ошибка в этом
|
|||
19
YHVVH
24.12.12
✎
14:48
|
(18) желательно удалить
|
|||
20
vmv
24.12.12
✎
14:49
|
вот на группу вроде ссылок 0, да
ты ее грохаешь из базы без пометки, т.е. непосредственно и потом начинаеться удалении, возможно в другом потоке, элементов этой группы. куда должна послеть платформа разработчика сего универсализма? |
|||
21
vmv
24.12.12
✎
14:50
|
если есть иерархия или подчинение, то лучше пометить группы/владельцев единоразово, а элементы уже крушить порциями. на третьем шаге - удалить группы штатно
|
|||
22
YHVVH
24.12.12
✎
14:53
|
(21) у меня элементы которые я удаляю могут принадлежать разным владельцам
|
|||
23
YHVVH
24.12.12
✎
14:53
|
я не подумал про это
|
|||
24
YHVVH
24.12.12
✎
14:54
|
возможно ты прав на счет владельца
|
|||
25
YHVVH
24.12.12
✎
14:55
|
+(22) т.е. на разным а одинаковым
|
|||
26
YHVVH
24.12.12
✎
14:56
|
ну тогда получается что число потоков будет ограниченно количеством владельцев
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |