Имя: Пароль:
1C
1С v8
Отключить сжатие со стороны сервера
, ,
0 Georg_QQ
 
20.03.18
10:07
Добрый день. Ситуация следующая. Есть объемные документы. При включенном сжатии происходит следующее. Документ записывается в базу 2-5 сек. а передача данных между клиентом и сервером занимает 840 сек.

При отключении сжатия параметром запуска "/TComp -None" общее время выполнения уменьшается до 37 сек. для deflate общее время выполнения 90 сек. Т.е. используемый платформой алгоритм по умолчанию тормозит процесс больше чем в 20 раз. разница ощутима.

Как отключить это сжатие на стороне сервера? (клиентов больше 1000, разные базы. часть используют web в котором параметр запуска не пропишешь в принципе) гугл не помог.
1 Georg_QQ
 
20.03.18
11:17
платформа 8.3.11, актуально для всей линейки, как и для 8.3.10.

подразумевается клиент-серверный вариант с ms sql
2 H A D G E H O G s
 
20.03.18
11:51
Какая конфигурация?
3 Fragster
 
гуру
20.03.18
11:58
не хватает процессора, а сети хватает с избытком. бывает такое.
4 lodger
 
20.03.18
12:11
(0) на уф же не весь документобъект сериализуется к отправке на клиент?
5 Georg_QQ
 
20.03.18
12:13
(3) Логично что не хватает. Это я понял) Вопрос как выключить сжатие, которое ему мешает. Разницы кстати нет, что 1 пользователь в сети, что 800. те же 840 секунд +-20
6 Georg_QQ
 
20.03.18
12:15
(4) не вижу как это могло бы повлиять. документ записывал как с модифицированностью так и без. изменение времени выполнения практически нет.
7 H A D G E H O G s
 
20.03.18
12:22
Множественные, избыточные вызовы сервера вангую.
8 lodger
 
20.03.18
12:25
а я вангую ненужный на клиенте объем данных.
например ТЗ со всеми строками.
9 Georg_QQ
 
20.03.18
12:26
(2) 1. физ сервер. 2 проца (intel xeon cpu e7-8857 v2)

3 виртуальных машины. Отдельно БД MS SQL 2016 (64gb ram 12 лог. ядер процессора (2х6)), отдельно сервер приложений 1с (32gb ram 4 ядра (2х2) ), отдельно RDP + IIS (64gb 24 ядра  (2*12)) все в среде vmware. каждая виртуалка на своей группе хардов. вирт.сеть 10gbps изолированная.

Распределение ресурсов в соответствии с рекомендациями 1С
10 Georg_QQ
 
20.03.18
12:29
(7) в тестовой среде было выключено все. Форма документа пересоздана по умолчанию без процедур и оформления. процедуры в модуле объекта и все подписки отключены. т.е. голая запись объекта в базу интерактивно. без дополнительного кода. множественным вызовам по стандартной кнопке "Записать" взяться просто неоткуда.
11 Georg_QQ
 
20.03.18
12:31
(8) к сожалению объем данных не избыточен. Он просто большой.
12 Georg_QQ
 
20.03.18
12:33
проблема длительного выполнения записи решается отключением сжатия. только вот не могу найти как отключить это самое сжатие по умолчанию для всех подключений.
13 lodger
 
20.03.18
12:37
14 H A D G E H O G s
 
20.03.18
12:38
(8) ТЗ со всеми строками бывает на клиенте тогда, когда ее пользователь промотает
15 Georg_QQ
 
20.03.18
12:39
(13) нет, не мой коллега. но на его вопрос уже попадал пока искал решение в гугле.
16 H A D G E H O G s
 
20.03.18
12:40
Это вам расплата за виртуалки :-)
17 Georg_QQ
 
20.03.18
12:41
(14) А понял. Нет, можно было просто открыть документ (уже существующий, или скопировать уже существующий (на вновь созданной форме процедур не было, заполнение отсутствовало)
нажать записать, не трогая тч и при наличии сжатия 14 минут ожидания возврата управления пользователю. при выключенном сжатии 30-40 сек.
18 Georg_QQ
 
20.03.18
12:43
(16) Было такое предположение. Но отключение сжатия снимает проблему практически полностью. Поэтому грешить на виртуалки получается не совсем, точнее вообще не получается.
19 lodger
 
20.03.18
12:44
что-то мне подсказывает, что если поглядеть в default.vrd,
то мы увидим параметры коннехта к агенту 1с.
знать бы какие есть ключи у этих:
xmlns="http://v8.1c.ru/8.2/virtual-resource-system
xmlns:xs="http://www.w3.org/2001/XMLSchema
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
20 H A D G E H O G s
 
20.03.18
12:44
(17) У вас проблемы не там, где вы ищите.
Даже без выключения сжатия, запись документа с 2 ТЧ по 1000 строк - не более 2 секунд в самом худшем случае.
21 Georg_QQ
 
20.03.18
12:48
(20) 2000 строк 0.7 сек. - без сжатия.

30 тыс строк.
30-40 сек. - без сжатия
~14 минут - со сжатием.

сама запись в БД на тестовой базе. (кодом полностью на сервере) 0.04-0.46 сек - 2 тыс строк. 0.9-1.9 сек 30 тыс строк в зависимости от заполнения.
22 H A D G E H O G s
 
20.03.18
12:51
(21)

Есть документ в базе, на 30 тыс строк, его тупо открываем и нажимаем кнопку "Записать"?

или
Создаем новый документ, загружаем в него 30 тыс строк из excel, и нажимаем кнопку "Записать"?
23 lodger
 
20.03.18
12:52
+ (19) в строку ib="Srvr="localhost:1641";Ref="BolshayaBaza";"
не пробовали добавить параметр "/TComp -None" ?
параметр юзера и пароль туда можно вписывать.
24 Georg_QQ
 
20.03.18
12:55
(22) оба варианта задержка со сжатием ~840сек +-10-20 сек.
25 Georg_QQ
 
20.03.18
12:58
(23) а полную строку с параметром привести можете, я сколько пробовал. просто падает возможность подключения.

Если получится, то это решит проблему с web. наполовину легче)

Только для тонкого проблема останется.
26 lodger
 
20.03.18
13:01
синтаксис параметров примерно такой:
параметр=ЗначениеПараметра + ";;" + параметр2=ЗначениеПараметра2
значит надо добавить ;; имя парметра у нас TComp=
значение -None или просто None, возможно надо обрамить кавычками " и "
всего 4 варианта перепробовать надо. мне лень... (:
27 Georg_QQ
 
20.03.18
13:10
(26) окей, я попробую. Но вопрос, остается открытым как выключить сжатие по умолчанию для всех подключений.
28 lodger
 
20.03.18
13:29
(27) если я все правильно понимаю, то у агента сервера нет такого параметра.
использование сжатия определяется на стороне клиента (в случае веб-сервиса в IISe\Apache).
29 Georg_QQ
 
20.03.18
14:28
(28) т.е. отключить сжатие со стороны сервера невозможно? какая прелесть.
30 lodger
 
20.03.18
15:03
(29) по ходу дела, сервер обслуживает любой уровень сжатия и он устанавливается автоматом на каждый сеанс, в зависимости от его параметров.
имхо, подробнее только хотлайн ответит.
31 H A D G E H O G s
 
20.03.18
15:04
Откройте форму документа в конфигураторе, найдите вашу гигантскую таблицу и уберите галку "использовать всегда". Попробуйте сохранить документ
32 lodger
 
20.03.18
15:17
(31) +1.
слабо вериться, что в каждой жизненной ситуации на клиент передается весь *любой* массив данных.
документобъект на клиенте состоит из реквизитов, где только ссылки (гуиды), и видимой части ТЧ, которая зовется ДанныеФормыКоллекция. вот в ней должно быть данных не сильно больше чем влазит в окно с ТЧ. зачем гонять всю ТЧ туда-сюда не понятно.
33 Georg_QQ
 
20.03.18
15:41
(32) я не говорю что оно гоняет туда сюда все постоянно. но вот какая ситуация.

создал для этого документа форму. новую автоматом. никаких процедур и функций нет.

далее. добавил к нему процедуру с метками времени. Передача управления серверу. преобразование реквизита формы в объект, запись объекта, преобразование объекта в реквизит формы, передача управления клиенту.

итого получилось то что на этих двух картинках. Одно со сжатием, одно без сжатия соответственно

https://files.icq.net/get/07U2RAjrh8xwm7XOEfLhfV5ab1000f1ab

https://files.icq.net/get/07f38UKpdE2cGzRVxOuWss5ab100101ab

Если сервер и клиент 1с находятся на 1 машине, то сжатие не дает эффекта и задержки сравни с вариантом без сжатия.
34 H A D G E H O G s
 
20.03.18
15:45
(33) Галочку убрал?
35 H A D G E H O G s
 
20.03.18
15:47
"Если сервер и клиент 1с находятся на 1 машине, то сжатие не дает эффекта и задержки сравни с вариантом без сжатия."

Очень странная фраза.
Если сервер и клиент 1С находятся на 1 машине - используется loopback и смысла в сжатии = нет и, значит, без сжатия - будет быстрее.
Если сервер и клиент 1С находятся на разных машинах - бутед использоваться сеть и тут возможны варианты.
36 H A D G E H O G s
 
20.03.18
15:47
(33) Что по времени, когда сервер 1С и клиент находятся на одной машине?
37 lodger
 
20.03.18
15:56
(33) вот это вот "преобразование реквизита формы в объект, запись объекта, преобразование объекта в реквизит формы" - зачем?
это уже объект. почему нельзя .записать()?
38 Georg_QQ
 
20.03.18
15:59
(36) если на одной машине и клиент и сервер 1с, то отрабатывает с задержкой как без сжатия. хотя в справке прописано сжатие усиленное.

насчет галочки эффекта нет, т.к. таблица отображается на форме документа.
39 Georg_QQ
 
20.03.18
16:00
(37) эм. нет. УФ. Реквизитформы с типом ДокументОбъект и ДокументОбъект - это разные типы.
40 Georg_QQ
 
20.03.18
16:06
(37) сама функция сделана просто чтобы отслеживать время. и наглядно увидеть какая именно часть тормозит при записи документа. по сути урезанный аналог кнопки записать, т.к. не провоцирует вызов событий формы.

вот листинг


&НаСервере
Процедура ЗаписатьПадарасаНаСервере(НачалоПередачи, КонецПередачи)
    
    КонецПередачи = ТекущаяУниверсальнаяДатаВМиллисекундах();
    
    Время = (КонецПередачи - НачалоПередачи)/1000;
    Сообщить("Время передачи данных на сервер: " + Время);
    
    
    
    Начало = ТекущаяУниверсальнаяДатаВМиллисекундах();
                
    ДокОбъект = ДанныеФормыВЗначение(Объект,Тип("ДокументОбъект.ЗП_НачислениеЗарплаты"));
    
    Конец  = ТекущаяУниверсальнаяДатаВМиллисекундах();
    
    ВремяОтправки = (Конец - Начало) / 1000;
            
    Начало = ТекущаяУниверсальнаяДатаВМиллисекундах();
    
    ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
    
    Конец  = ТекущаяУниверсальнаяДатаВМиллисекундах();
    
    ВремяЗаписи = (Конец - Начало) / 1000;
    
    
    Начало = ТекущаяУниверсальнаяДатаВМиллисекундах();
    
    ЗначениеВДанныеФормы(ДокОбъект,Объект);
    Конец  = ТекущаяУниверсальнаяДатаВМиллисекундах();
    
    Времявозврата = (Конец - Начало) / 1000;
    
    Сообщить("Время преобразования в объект: " + ВремяОтправки + Символы.ПС + "Время записи: " + ВремяЗаписи + Символы.ПС + "Время преобразования из объекта: " + Времявозврата );
    
    Модифицированность = Ложь;
    
    НачалоПередачи = ТекущаяУниверсальнаяДатаВМиллисекундах();
    
КонецПроцедуры

&НаКлиенте
Процедура ЗаписатьПадараса(Команда)
    
    Начало = ТекущаяУниверсальнаяДатаВМиллисекундах();
    
    НачалоПередачи = Начало;
    
    КонецПередачи = Неопределено;
    
    ЗаписатьПадарасаНаСервере(НачалоПередачи,КонецПередачи);
    
    КонецПередачи = ТекущаяУниверсальнаяДатаВМиллисекундах();
    
    ВремяВозврата = (КонецПередачи - НачалоПередачи) / 1000;
    
    Сообщить("Время возврата с сервера: " + Времявозврата);
    
    Конец  = ТекущаяУниверсальнаяДатаВМиллисекундах();
    
    Времявозврата = (Конец - Начало) / 1000;
    
    
    
    Сообщить("Общее время выполнения: " + Времявозврата);
    
КонецПроцедуры
41 Georg_QQ
 
20.03.18
16:39
Так как побороть такие задержки. 30-40 сек без сжатия терпимо, но тоже как-то ни разу не весело.
42 lodger
 
20.03.18
17:29
(39) вы превратно поняли вопрос. вернитесь в реальное применение формы документа.
43 Georg_QQ
 
21.03.18
12:55
(42) не понял что вы имеете ввиду
44 H A D G E H O G s
 
21.03.18
12:58
А можно выгрузку базы? Вот не верю я, что такие задержки есть.
45 H A D G E H O G s
 
21.03.18
12:58
Вернее, что проблема в сжатии и коде.
46 H A D G E H O G s
 
21.03.18
12:58
Можно на [email protected]
47 Georg_QQ
 
23.03.18
14:25
(46) ушло на почту [email protected] с результатами еще одного теста на другом железе

(5) правка. разницы между 1 пользователем и 800+ - есть.
Но появляется только после перезапуска сервера предприятия (не ос, рестарт службы). при 1 пользователе в сети имеем ~15 сек без сжатия, ~30 сек со сжатием.
48 H A D G E H O G s
 
23.03.18
14:27
(47) Сейчас посмотрим
49 H A D G E H O G s
 
23.03.18
15:28
(47) Мои замеры
29,184 секунд с усиленным (от 1С) сжатием.
15,179 секунд - без сжатия.
15,180 секунд - с сжатием deflate.
50 H A D G E H O G s
 
23.03.18
15:29
8.3.10
i5-3450s, все на одной машине.
51 H A D G E H O G s
 
23.03.18
15:29
Надо еще трафик померять
52 H A D G E H O G s
 
23.03.18
15:30
И усреднить показания 10 прогонами
53 H A D G E H O G s
 
23.03.18
15:34
Как всегда - все упирается в ядро проца. 25% загрузки ровно - то клиент 1сv8c, то сервер rphost
54 H A D G E H O G s
 
23.03.18
15:57
10 проходов
Общее время выполнения (Без сжатия): 160,375
Общее время выполнения (deflate): 157,715
Общее время выполнения (SDC): 248,361
55 H A D G E H O G s
 
23.03.18
16:24
Без сжатия - 1 проход - 17182 Кб трафика
deflate - 1 проход - 392 Кб трафика
SDC - 1 проход - 345 Кб трафика
56 H A D G E H O G s
 
23.03.18
16:25
Такой мощный коэффициент сжатия объясняется дублирующимися данными у автора.
57 H A D G E H O G s
 
23.03.18
16:32
Но все равно, SDC, хоть и жмет лучше (не критично), но работает дольше раза в полтора.

А теперь посмотрим на цифры.
160 секунд у нас идет сериализация, чистая.
Значит, в случае типового сжатия, 248-160 секунд у нас идет тупо сжатие, которое можно заменить почти нулевым deflate-ом с небольшими потерями в трафике, для локальных сетей ненапряжными. Я бы сказал, что потеря 12% трафика актуальна, ну я не знаю, в GPRS-е, наверное.

Таким образом замена типового сжатия на deflate даст 35% выигрыша на клиент-серверный обмен.

Еще бы получить подтверждаемость от других участников и опровержения :-)
58 H A D G E H O G s
 
23.03.18
16:33
", но работает дольше раза в полтора. "
Не в полтора раза (50%), а на 35%, если я верно посчитал.
59 H A D G E H O G s
 
23.03.18
16:33
Еще можно потестировать на недублирующихся данных.
60 Georg_QQ
 
24.03.18
06:11
(59) ну и я о том же) написал в суппорт 1с вопрос есть ли возможность переопределить параметры сжатия при подключении к серверу по умолчанию, со стороны сервера, или они заданы только в клиентской части. На других форумах говорят что это клиентская часть запрашивает работу со сжатием по умолчанию и со стороны сервера не переопределить.
61 Georg_QQ
 
06.04.18
14:29
(26) никакой вариант не работает. для web система просто игнорирует этот параметр
62 Georg_QQ
 
06.04.18
14:32
(60) со стороны сервера штатно отключить не получится, нет такой возможности. но как решение для конкретной конфигурации - проверять строку подключения и перезапускать сеанс если нет параметра отключающего сжатие с добавлением этого параметра.
63 Вафель
 
06.04.18
14:51
Разве галочка "Испольлзовать всегда" не убирает только НЕВИДИМЫЕ реквизиты?
64 Fragster
 
гуру
06.04.18
22:51
(61) вряд ли в веб не дефлэйт/гзип, а поделка 1с на js
65 Aleksey
 
06.04.18
22:55
(57) ну так а что запустить то надо
66 Провинциальный 1сник
 
07.04.18
04:37
(64) К веб-серверу может подключаться тонкий клиент, и в нём можно задать сжатие. В отличие от браузера.
67 Fragster
 
гуру
08.04.18
19:13
(66) запросто. Для файрфокса: заходишь в about:config, ищешь параметр network.http.accept-encoding;gzip, deflate, очищаешь. Всё, сжатие между сервером и браузером пропало. Далее только если реализована кривая и тормозная поделка на js.
68 Fragster
 
гуру
08.04.18
19:15
ну, или конкретно применительно к 1с, можно добавлять параметры командной строки в ссылку с базой, примерно так:
http://сервер/путь/к/базе/?L=ru&VL=ru_RU
69 0xFFFFFF
 
08.04.18
20:56
Что это за файлы? Видеоролики?