Доброго времени суток всем.
Есть конфа, самописная 7,7. Люди работают, все путем.
Есть справочник. Пользователи в него не заходят, а инфа из него автоматом отображается при необходимости.
Справочник этот закачивается из DBF-файла. Размер исходника пол-гига (700 тыс зап). Периодичность - раз в месяц.
Закачивается (если в монополе) около 3-х часов. Если с общим доступом еще больше. Если в общем доступе закачивать, то падает производительность и пользователи жалуются на "тормоза". Вынужден ставить на закачку минут за 10 до конца работы и уходить.
Возникла необходимость запускать загрузку в рабочее время. Соответственно начались проблеммы с пользователями.
Привожу пример кода. Условие сч<=0 это счетчик, для закрытия транзакции и начала новой. Сделал так, потому что заметил, что производительность падает посел 200 записи.
А вот можно ли сделать так, что бы между командами
ЗафиксироватьТранзакцию() и НачатьТранзакцию() приостанавливать обработку на секунд 15-30 и что бы при этом эта остановка не грузила остальные машины, а наоборот позволяла им что то делать.
Код:
ЗаписейДляОбработки=200;
НачатьТранзакцию();
пока дб1.вКонце()=0 цикл
Сч=Сч-1;
Если сч<=0 тогда
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
Сч=ЗаписейДляОбработки;
КонецЕсли;
спр.новый();
спр.id=дб1.ПолучитьЗначениеПоля("ID");
спр.FAMILY=дб1.ПолучитьЗначениеПоля("FAMILY");
спр.NAME=дб1.ПолучитьЗначениеПоля("NAME");
спр.FATHER=дб1.ПолучитьЗначениеПоля("FATHER");
...
спр.записать();
Дб1.Следующая();
конеццикла;
ЗафиксироватьТранзакцию();
PS не знаю на сколько ясно выразился, но задача в том, что бы минимизировать нагрузку на базу во время выполнения загрузки и позволить остальным продолжить работу и не слышать вой "1С тормозит..."