Консультация № 144100
16.09.2008, 14:46
0.00 руб.
16.09.2008, 14:47
0 5 2
Нуждаюсь в помощи. Может не в ту рассылку, но 1С тут тоже "участвует", может и в ней дело... Имеется 1с 7.7 релиз 025 Бухгалтерия самописная, внешняя обработка и sql server2005. База 15 Гб на sql-е крутится, пользователи подключаются не по терминалу. Настройки сервера делал не я, но там все четко. На сервере:
* Файлы данных и журнала отделены друг от друга (один на диске C другой на диске D)
* Автоматическое увеличение настроено как прибавление по 5Гб
* Настроена автоматическая инициализация файлов
* Автоматическое сжатие отключено
* Автоматическая статистика настроена и регулярно обновляется
Выгрузка за 6 месяцев прошла успешно за 5 часов (в другом филиале она же за 3 часа выполняется). А за 9 месяцев обработка стала выгружаться около 12-и часов. Она сама не менялась и релизы на Бухгалтерию не ставились. Для сравнения запускал ее же на локальной базе, вообще за полтора часа выгружается. В чем может быть причина увеличения времени выгрузки? И как можно вернуться хотя бы к 5-и часам?
P.S. Пробовал 27 релиз ставить - не помогло. С базой экспериментировал - не помогло (ошибок нет, индексы нормальные, журнал транзакций не большой). Есть мысля поставить 2000 sql, но уж очень хотелось бы разобраться в проблеме, прежде чем переустанавливаться....

Обсуждение

Неизвестный
16.09.2008, 15:07
общий
Если у вас стоит бухгалтерия пусть и самописная как вы указали то что(какие данные) и куда вы выгружаете (если в файл то какого типа txt dbf xml если во что то другое то во что) желательно еще код обработки выгрузки
Неизвестный
16.09.2008, 15:43
общий
Упс. Чувстовал что что-то забыл дописать :). Обработка называется "ВнутриГрупповая выгрузка 2.07". Код привести не могуОбработка выбирает БИ и выгружает их в txt, потом из него через р3 в головной филиал. Код не могу написать (нельзя мне!), да и не за чем. Обработка не изменялась. Работает примерно так: считает итоги по 50, 51, 52 , 57.1, 57.2 , 58.5 и 58.3 счетам. Потом по из списка контрагентов СписокКонтрагентов.ПолучитьЗначение(Инд) получает Контрагента и на основе его данных по коду позиции формирует txt. Примерно так....
Неизвестный
16.09.2008, 16:39
общий
это ответ
Здравствуйте, kaban! Привожу в приложении процедуру создания объекта типа текст но через компоненту V7 1С Предприятия 7.7 . В чем нюанс - когда вы просто создаете объект "Текст" то при обращении к файлу для записи или чтения данных машина "грузит" в себя весь файл и если объем данных очень большой(т.е. файл большой) то тормозит конкретно, а когда создаем через V7 то 1с обращается к файлу построчно . В общем работает гораздо быстрее проверено. Если найдете в обработке у себя СоздатьОбъект("Текст") то методом замены на V7TextFile я думаю сможете уменьшить тормоза.


Приложение:
// ************************
// Имя - имя базы
// З - 0 открыть для чтения 1 - для записи
Функция ОткрытьБазу(Имя,З=0) // Открывает базу и возвращает идентификатор
перем Н,гСтрПуть,гИмяФайла;
Если ПустоеЗначение(Имя)=1 Тогда
Предупреждение("Выберите файл",0);
Возврат ("");
КонецЕсли;

Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда
Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "ExtForms" + "v7plus.dll") <> 1 Тогда
Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "v7plus.dll") <> 1 Тогда
гСтрПуть = ПолучитьКаталог(Имя);
Если ЗагрузитьВнешнююКомпоненту(гСтрПуть + "v7plus.dll") <> 1 Тогда
Предупреждение("Компонента v7plus.dll не найдена!");
СтатусВозврата(0); Возврат "";
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;


Попытка
Н = СоздатьОбъект("AddIn.V7TextFile");
Исключение
Сообщить(ОписаниеОшибки());
Предупреждение("Необходимо обновить версию компоненты v7plus.dll !");
СтатусВозврата(0); Возврат "";
КонецПопытки;

Н.КодоваяСтраница(0);

Если (ФС.СуществуетФайл(Имя)=0)И(З=0) Тогда
Возврат "";
КонецЕсли;

Н.ОткрытьФайл(Имя,З);
Сост("Открыта база "+Имя);
Возврат (Н);

КонецФункции

// ****************************
Неизвестный
16.09.2008, 16:54
общий
Добавлю еще. Что до выгрузки в текстовый файл дело еще не доходит, поэтому я про это сразу и не написал. Я понимаю что тут действует метод нарастающих итогов, и, по логике, время должно увеличиться, но не на столько же! Не с 5-и же часов на 19!!!! База SQL - 19 часов, на DBF - 1.5ч
Неизвестный
16.09.2008, 21:04
общий
это ответ
Здравствуйте, kaban!
Если на локальном компе выполняеться за полтора часа, значит:
1) не оптимизировано под СКЛ.
2) не оптимизировано для сети.
Решения:
1) Оптимизация под СКЛ дело довольно муторное и часто неблагодарное. Но нужное. Можете почитать например это: http://kpblm.org.ua/other/supp/ и пересмотреть код обработки: где что можно поменять. Например Вы пишите, что из списка контрагентов получается контрагент и его данные выгружаються в файл, может имеет смысл сделать вместо списка таблицу, и запихивать сразу же в нее все данные Контрагента? Это позволит лишний раз не обращаться к базе за данными Контрагента, а получить их локально. Пример я привел только для того, чтобы показать общий ход оптимизации: уменьшить количество обращений к базе данных (возможно для Вас он и не применим - но общее направление показывает).
2) Запустите обработку в терминале на сервере: так Вы точно узнаете тормозит СКЛ или сеть.
3) Испльзуйте в отладчике режим замера производительности - это великолепное средство для вычисления узких мест в коде. Можно сравнить результаты замера в СКЛ и в локальной базе.
4) Может имеет смысл выгружать данные с меньшим интервалом? 1С вообще-то знаменита своими тормозами при работе с большими объемами (например при сохранении таблицы в Excel время сохранения увеличивается в прогресии относительно размера). Поэтому возможно будет быстрее выполнить 6 выгрузок помесячно вместо 1 за 6 месяцев?
Форма ответа