Показать сообщение отдельно
Старый 03.12.2008, 10:25     # 3432
Alex Dark
КОТовский
 
Аватар для Alex Dark
 
Регистрация: 12.03.2003
Адрес: ОренБюргер
Пол: Male
Сообщения: 1 569

Alex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех ГуруAlex Dark Отец (мать) всех Гуру
Доброго времени суток всем.
Есть конфа, самописная 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С тормозит..."
__________________
Все мы финансовые гении и эффективные менеджеры,
только не у всех одногруппник или сосед по даче - президент.
Alex Dark вне форума