gifts2017

Транзакция с прерыванием

Опубликовал Михаил Семенов (Shaman100M) в раздел Программирование - Практика программирования

Упаковка метода от "уставания" транзакции
Материалы данной разработки уже применялись в :
http://infostart.ru/profile/8196/projects/1367/
http://infostart.ru/profile/8196/projects/1340/

Ни для кого не секрет, что использование методов НачатьТранзакцию(); ЗафиксироватьТранзакцию();
позволяет не только записать / отменить в случае ошибки все проделанные программно изменения
с объектами ИБ, но и значительно ускорить выполнение модулей. Однако, при наращивании объемов
изменений скорость начинает падать, эффект ускорения сходит на нет. Способ борьбы с замедлением
давно известен: разбивать одну длинную транзакцию на несколько, фиксируя предыдущую и начиная новую
внутри первого из вложенных циклов, либо по достижении назначенного счетчика (например, количество
проведенных документов) определенных максимальных уровней, что-то вроде:
НачатьТранзакцию();
Для ... По ... Цикл
    ...
    КолОбъектов = КолОбъектов + 1;
    Если КолОбъектов%МаксКолОбъектов = 0 Тогда
        ЗафиксироватьТранзакцию();
        НачатьТранзакцию();
    КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();      

Вот еще вариант, завязанный на время выполнения транзакции - 1 минута
НачатьТранзакцию();
НачВремя = _getperformancecounter();                
Интервал = 60000; // милисекунд в минуте
Для ... По ... Цикл
    ...
    Если _getperformancecounter() > НачВремя + Интервал Тогда
        ЗафиксироватьТранзакцию();
        НачатьТранзакцию();
	НачВремя = _getperformancecounter(); 
    КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();      


Этими строчками кода вполне можно обойтись. Если все таки необходимо задавать частоту прерывания
транзакции в диалоге, то эта скачиваемая обработка имеет в своем составе и элементы диалога и
несколько процедур для этой задачи. В обработке присутствует функционал прерывания или разбития
транзакции по счетчику, и по времени, а также пример работы.

Успехов!

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

Наименование Файл Версия Размер Кол. Скачив.
-
.1194968990 6,64Kb
25.09.09
64
.1194968990 6,64Kb 64 Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

1. V. L. (Vladal) 20.11.07 13:19
В типовой обработке переноса справочников и документов так и делается.
2. Аркадий Кучер (Abadonna) 20.11.07 13:30
А разве по другому можно додуматься? Всю жизнь так делаю, даже стандарт для себя установил - 250 интераций
3. Михаил Семенов (Shaman100M) 21.11.07 11:00
(1) Так и прелагается не содержимое, а упаковка, в наш век полимеров. ;)
4. DrZombi DrZombi (DrZombi) 30.09.14 09:20
Я вот все время думаю... А разве Транзакция не подвешивает вообще всю БД?
Ведь если работают 30 пользователей, то пока один там натранзактится, то все остальные Курят?

Почему народ такие мелочи опускает и везде сует использование Транзакции, а потом удивляется, что пользователи висят и БД работает через ЖП :)
5. Михаил Семенов (Shaman100M) 07.11.14 17:47
Призываю народ подумать еще немного, в чем может быть смысл прерывания.
Думать в сторону всунуть в это прерывание задержку ..., чтобы было не ЖП.
;)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа