Имя: Пароль:
1C
1С v8
Проблема производительности в режиме клиент-сервер
,
0 extrim-style
 
07.02.13
12:44
Имеется Бухия 1.6. В файловом варианте закрытие месяца - 2 минуты. В режиме клиент-сервер 40 минут. На одном и том же сервере. Сервер вполне производительный. Куда смотреть? Что можно донастроить?
1 ДенисЧ
 
07.02.13
12:44
в сторону канадской границы... Успеешь. У тебя ещё пара дней есть.
2 DEVIce
 
07.02.13
12:45
(0) Нагрешил ты где-то, иди вымаливай прощение. :)
3 extrim-style
 
07.02.13
12:47
(2) это не мой велосипед) я еще за него не брался)
4 extrim-style
 
07.02.13
12:47
+(3) нужно помочь
5 GANR
 
07.02.13
12:47
(0) Замер производительности в помощь. Сравни результаты замеров в файловом и серверном вариантах. Если хочешь конкретику узнать - базу на файловый хостинг.
6 DEVIce
 
07.02.13
12:48
(3) Пойди тогда помолись за успех дела. Окропи СВЯТОЙ водой сервер, перекрести его - может поможет, на все воля божия.
7 GANR
 
07.02.13
12:49
(0)>Сервер вполне производительный.
Не играет роли - 1С не использует все 8 ядер процессора. Там же нет распараллеливания.
8 extrim-style
 
07.02.13
13:01
(8) это мне известно. По-твоему получается в файловом режиме использует ядра, в клиент-серверном нет?..
9 GANR
 
07.02.13
13:07
(8) Нет, ни файловая, ни серверная не используют все ядра. Планы запросов могут быть разными в файловом и серверном варианте. Один использует индексы, другой - нет, например. Ещё, может, условие где-то в алгоритме стоит, что в файловом варианте - так делать, в серверном - так. Замерять надо, в общем.
10 Kreont
 
07.02.13
13:12
(0) Попробуй так:
В закрытии месяца не делать по всем пунктам сразу, а сделать отдельно документы закрытия по каждому разделу.
11 Sammo
 
07.02.13
13:15
Что значит на одном и том же сервере? Скуль и сервер 1с на 1 сервере?
12 extrim-style
 
07.02.13
13:27
(11) и так, и так пробовали
а вобще тут http://infostart.ru/public/147259/ в самом низу
"Разносим сервера SQL и Сервера 1с отдельно: На текущих технологиях Ethernet - например Gigabit - НЕ ЦЕЛЕСООБРАЗНО"
13 МихаилМ
 
07.02.13
13:28
(0)
была такая проблема. отладчик показал. что 1с не эфективно считывает данные - построчно. причем одно и тоже 3 раза.

построчные запросы в файловом варианте обрабатываюся быстрее.
14 extrim-style
 
07.02.13
13:29
(13) не совсем понял. Проблему удалось решить?
15 Maxus43
 
07.02.13
13:30
(14) замер сделай сначала и сравни. Скорей всего дело в запросах, можно оптимизировать для клиент-серверной логики и СУБД конкретной
16 DEVIce
 
07.02.13
13:30
(12) Кера там написана. Причеч керата как раз именно в этом предложении, о чем я там уже написал сегодня.
17 GANR
 
07.02.13
13:42
(13) Видел один отчетик (8.1, правда), который в цикле один и тот же запрос к регистрам накопления с разными параметрами повторял. Так вот: в клиент-серверной базе он работал быстрее, чем в файловой. Вообще непонятно.
18 МихаилМ
 
07.02.13
13:43
(14)
нет. закрытие - редкая операция. были еще проблемы производительности с формированием книги покупок.

ограничились настройкой папок временных файлов 1с в рам диск
и запуском клиента на сервере.

возможно некоторое ускорение даст настройка сетевых протоколов
для ms sql.

так же можно попробовать запусть  несколько сеансов и закрывать параллельно по разным контурам учета.
19 extrim-style
 
07.02.13
14:00
(18) на рам-диске на этой машине тестил специфическую базу. выйгрыша в производительности не нашел.
20 extrim-style
 
07.02.13
14:00
+(19) видимо, сервер итак шустрый
21 H A D G E H O G s
 
07.02.13
14:02
(18) "возможно некоторое ускорение даст настройка некоторых сетевых протоколов для некоторых ms sql. "

Ваш ответ как всегда точен. И бесполезен.
22 H A D G E H O G s
 
07.02.13
14:02
(19) Керово тестил. Вернее даже, не то ты тестил.
23 H A D G E H O G s
 
07.02.13
14:04
Что показал первый, самый простой и очевидный шаг - замер производительности 1С с включенным ключом -debug на сервере?
24 Maxus43
 
07.02.13
14:04
(23) ничего, автор не приступал к нему
25 H A D G E H O G s
 
07.02.13
14:07
(24) Пусть тогда продолжает писать в ветку. И то - хлебъ.
26 extrim-style
 
12.02.13
12:41
(25) вот только опять добрался до этой темы. Только что померил - 82% времени занимает выполнение вот этого запроса (судя по комментариям - переписанного) - ОбщийМодуль.УправлениеВнеоборотнымиАктивами (платформа 8.1)

Функция РасчетАмортизацииБухРегл(ДатаРасчета, Организация, ОсновноеСредство = Неопределено, ВыдаватьСообщения = Истина) Экспорт

...
Если ОсновноеСредство = Неопределено Тогда
       ТекстУсловия = "";
   Иначе
       Запрос.УстановитьПараметр("ОсновноеСредство", ОсновноеСредство);
       ТекстУсловия =           " И ОсновноеСредство В (&ОсновноеСредство)";
   Конецесли;
   
   СубконтоОС = Новый Массив();
   СубконтоОС.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ОсновныеСредства);
   Запрос.УстановитьПараметр("СубконтоОС", СубконтоОС);
   Запрос.Текст =
   "ВЫБРАТЬ РАЗРЕШЕННЫЕ
   |    НачислениеАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство,
   |    ПРЕДСТАВЛЕНИЕ(НачислениеАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство) КАК ОсновноеСредствоПредставление,
   |    НачислениеАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство.Код КАК Код,
   |    НачислениеАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство КАК ОСС ,
   |    ЕСТЬNULL(СтоимостьОСНачалоПериода.СуммаОстатокДт, 0) КАК СтоимостьНачальныйОстаток,
   |    ЕСТЬNULL(СтоимостьОСКонецПериода.СуммаОстатокДт, 0) КАК СтоимостьКонечныйОстаток,
   |    ЕСТЬNULL(АмортизацияОСНачалоПериода.СуммаОстатокКт, 0) КАК АмортизацияНачальныйОстаток,
   |    ЕСТЬNULL(АмортизацияОСКонецПериода.СуммаОстатокКт, 0) КАК АмортизацияКонечныйОстаток,
   |    ЕСТЬNULL(АмортизацияОСОбороты.СуммаОборотКт, 0) КАК АмортизацияОборот,
   |    ЕСТЬNULL(ВыработкаОСОбороты.КоличествоОборот, 0) КАК Количество,
   |    ЕСТЬNULL(ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.СрокИспользованияДляВычисленияАмортизации, 0) КАК СрокИспользованияДляВычисленияАмортизации,
   |    ЕСТЬNULL(ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.СтоимостьДляВычисленияАмортизации, 0) КАК СтоимостьДляВычисленияАмортизации,
   |    ЕСТЬNULL(ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.ОбъемПродукцииРаботДляВычисленияАмортизации, 0) КАК ОбъемПродукцииРаботДляВычисленияАмортизации,
   |    ЕСТЬNULL(ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.КоэффициентАмортизации, 0) КАК КоэффициентАмортизации,
   |    ЕСТЬNULL(ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.КоэффициентУскорения, 0) КАК КоэффициентУскорения,
   |    ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.Период КАК Период,
   |    ГрафикиАмортизацииБухгалтерскийУчетСрезПоследних.ГрафикАмортизации КАК ГрафикАмортизации,
   |    СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.СчетУчета КАК СчетУчета,
   |    СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.СчетНачисленияАмортизации КАК СчетНачисленияАмортизации,
   |    ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.ИнвентарныйНомер КАК ИнвентарныйНомер,
   |    ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.СпособНачисленияАмортизации КАК СпособНачисленияАмортизации,
   |    ЕСТЬNULL(ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.ПервоначальнаяСтоимость, 0) КАК ПервоначальнаяСтоимость,
   |    СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчетСрезПоследних.СпособыОтраженияРасходовПоАмортизации КАК СпособыОтраженияРасходовПоАмортизации,
   |    ЕСТЬNULL(СтоимостьНаНачалоГода.СуммаОстатокДт, 0) - ЕСТЬNULL(АмортизацияНаНачалоГода.СуммаОстатокКт, 0) КАК СтоимостьНаНачалоГода
   |ИЗ
   |    РегистрСведений.НачислениеАмортизацииОСБухгалтерскийУчет.СрезПоследних(&КонецПериода, Организация = &Организация " + ТекстУсловия + "
   |        И ОсновноеСредство НЕ В (ВЫБРАТЬ
   |            СостоянияОСОрганизаций.ОсновноеСредство
   |        ИЗ
   |            РегистрСведений.СостоянияОСОрганизаций КАК СостоянияОСОрганизаций
   |        ГДЕ
   |              СостоянияОСОрганизаций.Состояние = &СнятоСУчета И
   |            СостоянияОСОрганизаций.ДатаСостояния < &Период И
   |            СостоянияОСОрганизаций.Организация = &Организация  " + ТекстУсловия + "))
   |   КАК НачислениеАмортизацииБухгалтерскийУчетСрезПоследних
   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних(&НачалоПериода, Организация = &Организация И ПорядокПогашенияСтоимости = &НачислениеАмортизации " + ТекстУсловия + ") КАК ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних
   |        ПО НачислениеАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство = ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.ОсновноеСредство
   |         И НачислениеАмортизацииБухгалтерскийУчетСрезПоследних.НачислятьАмортизацию = ИСТИНА
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметрыАмортизацииОСБухгалтерскийУчет.СрезПоследних(&НачалоПериода, Организация = &Организация " + ТекстУсловия + ") КАК ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних
   |        ПО НачислениеАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство = ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикиАмортизацииОСБухгалтерскийУчет.СрезПоследних(&НачалоПериода, Организация = &Организация " + ТекстУсловия + ") КАК ГрафикиАмортизацииБухгалтерскийУчетСрезПоследних
   |        ПО НачислениеАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство = ГрафикиАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчет.СрезПоследних(&КонецПериода, Организация = &Организация " + ТекстУсловия + ") КАК СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчетСрезПоследних
   |        ПО НачислениеАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство = СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СчетаБухгалтерскогоУчетаОС.СрезПоследних(&НачалоПериода, Организация = &Организация " + ТекстУсловия + ") КАК СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних
   |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&НачалоПериода, , &СубконтоОС, Организация = &Организация) КАК СтоимостьОСНачалоПериода
   |            ПО СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.ОсновноеСредство = СтоимостьОСНачалоПериода.Субконто1 И СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.СчетУчета = СтоимостьОСНачалоПериода.Счет
   |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&КонецПериода, , &СубконтоОС, Организация = &Организация) КАК СтоимостьОСКонецПериода
   |            ПО СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.ОсновноеСредство = СтоимостьОСКонецПериода.Субконто1 И СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.СчетУчета = СтоимостьОСКонецПериода.Счет
   |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&НачалоПериода, , &СубконтоОС, Организация = &Организация) КАК АмортизацияОСНачалоПериода
   |            ПО СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.ОсновноеСредство = АмортизацияОСНачалоПериода.Субконто1 И СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.СчетНачисленияАмортизации = АмортизацияОСНачалоПериода.Счет
   |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&КонецПериода, , &СубконтоОС, Организация = &Организация) КАК АмортизацияОСКонецПериода
   |            ПО СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.ОсновноеСредство = АмортизацияОСКонецПериода.Субконто1 И СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.СчетНачисленияАмортизации = АмортизацияОСКонецПериода.Счет
   |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, Период, , &СубконтоОС, Организация = &Организация) КАК АмортизацияОСОбороты
   |            ПО СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.ОсновноеСредство = АмортизацияОСОбороты.Субконто1 И СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.СчетНачисленияАмортизации = АмортизацияОСОбороты.Счет
   |        ПО НачислениеАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство = СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследних.ОсновноеСредство
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВыработкаОС.Обороты(&НачалоПериода, &КонецПериода, Месяц, ) КАК ВыработкаОСОбороты
   |        ПО НачислениеАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство = ВыработкаОСОбороты.ОсновноеСредство И ПервоначальныеСведенияОбОсновныхСредствахОрганизацийСрезПоследних.ПараметрВыработки = ВыработкаОСОбороты.ПараметрВыработки
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СчетаБухгалтерскогоУчетаОС.СрезПоследних(&НачалоГода, Организация = &Организация " + ТекстУсловия + ") КАК СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследнихНаНачалоГода
   |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&НачалоГода, , &СубконтоОС, Организация = &Организация) КАК СтоимостьНаНачалоГода
   |            ПО СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследнихНаНачалоГода.ОсновноеСредство = СтоимостьНаНачалоГода.Субконто1 И СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследнихНаНачалоГода.СчетУчета = СтоимостьНаНачалоГода.Счет
   |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&НачалоГода, , &СубконтоОС, Организация = &Организация) КАК АмортизацияНаНачалоГода
   |            ПО СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследнихНаНачалоГода.ОсновноеСредство = АмортизацияНаНачалоГода.Субконто1 И СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследнихНаНачалоГода.СчетНачисленияАмортизации = АмортизацияНаНачалоГода.Счет
   |        ПО НачислениеАмортизацииБухгалтерскийУчетСрезПоследних.ОсновноеСредство = СчетаБухгалтерскогоУчетаОсновныхСредствСрезПоследнихНаНачалоГода.ОсновноеСредство
   |        ";
   
   ВыборкаПоОС = Запрос.Выполнить().Выбрать();
27 H A D G E H O G s
 
12.02.13
13:10
Посмотреть, как эта же фигня сделана в типовой УПП на временных таблицах.
28 Maxus43
 
12.02.13
13:17
ну вот, оптимизация, оптимизация и ещё разок её же
29 Maxus43
 
12.02.13
13:19
на вскидку, не нравится мне
РегистрБухгалтерии.Хозрасчетный.Остатки(&НачалоГода, , &СубконтоОС

т.е. вборка по всем счетам где есть такое субконто.
Даже с точки зрения учета не правильно ж
30 H A D G E H O G s
 
12.02.13
13:21
(29) Аааа, включил мозг.
Зряяя.
Берите из последней УПП, видно же что оптимизировали, переделали на ВТ.
31 Maxus43
 
12.02.13
13:22
(30) да на ВТ - понятно, а этот кусок просто бросился в глаз
32 extrim-style
 
12.02.13
13:55
(30) Спасибо за совет, но упп нет. буду благодарен за код.