Имя: Пароль:
1C
1С v8
Медленно отрабатывает обработка на клиент серверной базе
0 ultrannge89
 
16.10.14
07:29
В общем обработка довольно простая, для изменения реквизитов в справочниках, нахожу документы использующие эти справочники и распровожу их, меняю реквизит у справочника и снова провожу... На файловой базе отрабатывает 200 документов за 5 секунд, на серверной за 3-5 минут, при том что на серверной кроме меня в базе никого нет, конечно сервак не зверь, но и думаю проблема не в железе... В чем может быть косяк?
1 Sasha_Rapira
 
16.10.14
07:32
1) Файловый режим при 1 пользователе, работает быстрее клиент-северного режима при 1 пользователе
2) см. регл. и фоновые задачи
2 Мимохожий Однако
 
16.10.14
07:34
Делай замеры - узнаешь, где тормоза. Обычно и косяк там же, где большие интервалы.
3 ultrannge89
 
16.10.14
07:34
Да там база 1Гб, регламентированных задач нет, обмены в ручную... Я понимаю что серверная медленнее, но не в 30 раз же?
4 Sasha_Rapira
 
16.10.14
07:36
(3) между файловое и клиент-сервер всё одинаково? Пользователь тот-же самый? Как вариант замер производительности покажет долгое место
5 ultrannge89
 
16.10.14
07:37
Вот код:


    ИсходноеЗначениеСпр = Справочники.бит_стр_ТипДоговораРеализацииНедвижимости.НайтиПоНаименованию("Договор инвестирования (ДДУ)");
    КонечноеЗначениеСпр = Справочники.бит_стр_ТипДоговораРеализацииНедвижимости.НайтиПоНаименованию("Договор инвестирования");
    Контрагенты = ЭлементыФормы.СписокКонтрагентов.Значение;
    Если Контрагенты.Количество() > 0 Тогда
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
                       |    бит_стр_ДоговорИнвестированияДолевогоУчастия.Ссылка КАК ДоговорИнвестирования,
                       |    бит_стр_ДоговорИнвестированияДолевогоУчастия.ВидОперации
                       |ИЗ
                       |    Документ.бит_стр_ДоговорИнвестированияДолевогоУчастия КАК бит_стр_ДоговорИнвестированияДолевогоУчастия
                       |ГДЕ
                       |    бит_стр_ДоговорИнвестированияДолевогоУчастия.Проведен = ИСТИНА
                       |    И бит_стр_ДоговорИнвестированияДолевогоУчастия.Контрагент В(&Контрагенты)
                       |    И бит_стр_ДоговорИнвестированияДолевогоУчастия.ДоговорКонтрагента.бит_стр_ТипДоговораРеализацииНедвижимости = &ИсходноеЗначениеСпр
                       |    И бит_стр_ДоговорИнвестированияДолевогоУчастия.ВидОперации = ЗНАЧЕНИЕ(Перечисление.бит_стр_ВидыОперацииДоговораИнвестирования.Заключение)
                       |
                       |ОБЪЕДИНИТЬ ВСЕ
                       |
                       |ВЫБРАТЬ
                       |    бит_стр_ДоговорИнвестированияДолевогоУчастия.Ссылка,
                       |    бит_стр_ДоговорИнвестированияДолевогоУчастия.ВидОперации
                       |ИЗ
                       |    Документ.бит_стр_ДоговорИнвестированияДолевогоУчастия КАК бит_стр_ДоговорИнвестированияДолевогоУчастия
                       |ГДЕ
                       |    бит_стр_ДоговорИнвестированияДолевогоУчастия.Проведен = ИСТИНА
                       |    И бит_стр_ДоговорИнвестированияДолевогоУчастия.Контрагент В(&Контрагенты)
                       |    И бит_стр_ДоговорИнвестированияДолевогоУчастия.ДоговорКонтрагента.бит_стр_ТипДоговораРеализацииНедвижимости = &ИсходноеЗначениеСпр
                       |    И бит_стр_ДоговорИнвестированияДолевогоУчастия.ВидОперации = ЗНАЧЕНИЕ(Перечисление.бит_стр_ВидыОперацииДоговораИнвестирования.ИзменениеУсловий)
                       |;
                       |
                       |////////////////////////////////////////////////////////////////////////////////
                       |ВЫБРАТЬ
                       |    бит_стр_ДоговорИнвестированияДолевогоУчастия.ДоговорКонтрагента
                       |ИЗ
                       |    Документ.бит_стр_ДоговорИнвестированияДолевогоУчастия КАК бит_стр_ДоговорИнвестированияДолевогоУчастия
                       |ГДЕ
                       |    бит_стр_ДоговорИнвестированияДолевогоУчастия.Проведен = ИСТИНА
                       |    И бит_стр_ДоговорИнвестированияДолевогоУчастия.Контрагент В(&Контрагенты)
                       |    И бит_стр_ДоговорИнвестированияДолевогоУчастия.ДоговорКонтрагента.бит_стр_ТипДоговораРеализацииНедвижимости = &ИсходноеЗначениеСпр
                       |
                       |СГРУППИРОВАТЬ ПО
                       |    бит_стр_ДоговорИнвестированияДолевогоУчастия.ДоговорКонтрагента";
        Запрос.УстановитьПараметр("Контрагенты", Контрагенты);
        Запрос.УстановитьПараметр("ИсходноеЗначениеСпр", ИсходноеЗначениеСпр);
        МассивРезультатов = Запрос.ВыполнитьПакет();
        Попытка
            НачатьТранзакцию();
            ВыборкаСписокДокументов = МассивРезультатов[0].Выбрать();
            Проверка1 = МассивРезультатов[0].Выгрузить();
            ЭлементыФормы.НадписьИндикации.Значение = "Снятие с проведения документов";
            Пока ВыборкаСписокДокументов.Следующий() Цикл
                ДоговорИнвестирования = ВыборкаСписокДокументов.ДоговорИнвестирования.ПолучитьОбъект();
                ДоговорИнвестирования.Проведен = Ложь;
                ДоговорИнвестирования.Записать(РежимЗаписиДокумента.ОтменаПроведения);
            КонецЦикла;
            ЭлементыФормы.НадписьИндикации.Значение = "Изменение вида договора в договорах контрагентов";
            ВыбораДоговораКонтрагентов = МассивРезультатов[1].Выбрать();
            Проверка2 = МассивРезультатов[1].Выгрузить();
            Пока ВыбораДоговораКонтрагентов.Следующий() Цикл
                ДоговорКонтагента = ВыбораДоговораКонтрагентов.ДоговорКонтрагента.ПолучитьОбъект();     
                ДоговорКонтагента.бит_стр_ТипДоговораРеализацииНедвижимости = КонечноеЗначениеСпр;
                ДоговорКонтагента.Записать();
            КонецЦикла;
            ВыборкаСписокДокументов.Сбросить();
            ЭлементыФормы.НадписьИндикации.Значение = "Проведение документов";
            Пока ВыборкаСписокДокументов.Следующий() Цикл
                ДоговорИнвестирования = ВыборкаСписокДокументов.ДоговорИнвестирования.ПолучитьОбъект();
                ПолучитьСтруктуруСчетовЦелевогоФинансированияПоДоговоруИОбновитьСчета(ДоговорИнвестирования, ДоговорИнвестирования.ДоговорКонтрагента);
                ДоговорИнвестирования.Проведен = Истина;
                ДоговорИнвестирования.Записать(РежимЗаписиДокумента.Проведение);
            КонецЦикла;
            //ОтменитьТранзакцию();
            ЗафиксироватьТранзакцию();
            ЭлементыФормы.НадписьИндикации.Значение = "";
            Сообщить("Выполнено!");
        Исключение
            ОтменитьТранзакцию();
            Сообщить("Транзакция отменена");
        КонецПопытки;
        КонецЕсли;
6 ultrannge89
 
16.10.14
07:41
Делал я ее на клиент серверной и проверял тоже, выполнялась по 3-4 минуты, затем закинул на рабочую в файловой, стала за 3-5 сек выполняться...
7 ultrannge89
 
16.10.14
07:47
Просто сейчас сервак на sql используется только мной для теста, но в будущем будет переход с файловой на серверную и не хотелось бы чтобы они потом говорили что я им всю работу испортил, что у них теперь документы по часу перепроводятся...
Windows server 2008 r2, Intel Xeon E5607 2.27 Ghz (2 процессора), 12 Gb RAM, SAS Raid 10 level 1.8 Tb
Выделил скулю 4 Гб озу. Может быть в нем надо что-то настроить? У 1с сервера тоже никаких настроек не делал, т.к. пока мало ОЗУ.
8 ultrannge89
 
16.10.14
08:06
Вот топ:

    ОбщийМодуль.ОбщегоНазначения.Модуль    3 682    Набор.Записать();    1 464    62,892402    27,92
    ОбщийМодуль.ОбщегоНазначения.Модуль    4 406    Выборка = Запрос.Выполнить().Выбрать();    1 098    29,560968    13,12
    Форма.Форма.Форма    72    ДоговорИнвестирования.Записать(РежимЗаписиДокумента.Проведение);    183    17,955352    7,97
    ОбщийМодуль.ОбщегоНазначения.Модуль    4 472    Запрос.Выполнить();    549    13,323934    5,92
9 ultrannge89
 
16.10.14
08:06
Предпоследняя запись это время...
10 Злобный монстр
 
16.10.14
09:15
(9) Сколько одна транзакция объектов пишет? Если "многа тысяч" Поруби по частям фиксирование.
11 Злобный монстр
 
16.10.14
09:17
(10) + Ну в смысле не в одной гигантской транзакции все пиши. А в нескольких, например по 1000 записей.
12 Зеленый пень
 
16.10.14
09:35
Странно. Разница между файловой и серверной базой может быть в 5-10 раз, но не в 50.
База какого размера?
13 YFedor
 
16.10.14
09:39
УстановитьМонопольныйРежим(Истина) ?
14 ultrannge89
 
16.10.14
11:02
В транзакции 200 объектов распровожу, затем 200 изменяю и 200 провожу...
Монопольного режима не устанавливаю...
15 ultrannge89
 
16.10.14
11:04
База размером 1Гб. У меня даже конфигуратор открывается по несколько минут после выгрузки загрузки, есть ощущения что дело в неправильной настройки сервера... Сам по себе он слишком медленно выполняет многие действия.
16 hhhh
 
16.10.14
12:07
а здесь что?

               ПолучитьСтруктуруСчетовЦелевогоФинансированияПоДоговоруИОбновитьСчета(ДоговорИнвестирования, ДоговорИнвестирования.ДоговорКонтрагента);


это в цикле. может оно тормозит?
17 H A D G E H O G s
 
16.10.14
12:13
Зачем отменяем проведение?
18 Fragster
 
гуру
16.10.14
12:22
в замере производительности стрелочка в последней колонке (переход на сервер) сколько раз видна, и сколько в колонке "количество" напротив нее?
19 Fragster
 
гуру
16.10.14
12:23
(14) пусть транзакция по одной итерации будет. ну и (17) еще тоже.
20 ultrannge89
 
16.10.14
12:33
(16) Эта  функция как бы обновляет форму документа, подхватывая проводки из договора в зависимости от вида договора, это типовая функция...
(17), а как мне изменить проводки у документа не отменяя проведение?
логика такая: я нахожу нужные мне документы, отменяю проведение, меняю вид договора, обновляю проводки (счета) в документе и провожу...
Можно было конечно в одном цикле это делать, но не охота было париться над 5 минутной задачкой...
Наткнулся на статью http://курсы-по-1с.рф/articles/ускорить-1с-протокол-shared-memory/

Щас проверю как у меня настроена 1С, может проблемы в самом сервере, замер показывает что на серверном варианте та же самая операция выполняется в 30 - 40 раз дольше файловой.
21 ultrannge89
 
16.10.14
12:42
1CV82 Server    Shared memory
1CV82 Server    Shared memory
1CV82 Server    Shared memory
1CV82 Server    Shared memory
22 H A D G E H O G s
 
16.10.14
12:44
(21) Регламенты на SQL настроены, выполняютс?
Конфа - типовая?
23 H A D G E H O G s
 
16.10.14
12:44
А, стоп, вижу присутствие Бита.
24 H A D G E H O G s
 
16.10.14
12:45
Смотреть, какой регистр медленнее всего записывается, смотреть план запроса его записи, искать index scan
25 Зеленый пень
 
16.10.14
13:00
(24) Он выложил замер в (8), там 28% занимает самый тяжелый регистр, тут дело не в одном регистре.
26 H A D G E H O G s
 
16.10.14
13:13
(25) Даже не буду ничего комментировать.
27 Fragster
 
гуру
16.10.14
13:44
а отладка на сервере включена вообще?