При работе с крупными информационными базами 1С:Предприятие 8.3 часто возникает специфическая проблема: передача данных между клиентом и сервером занимает в десятки раз больше времени, чем сама запись данных в СУБД. Особенно остро это проявляется при работе с документами, содержащими десятки тысяч строк в табличных частях. Стандартные алгоритмы сжатия трафика, включенные в платформе по умолчанию, могут тратить колоссальные ресурсы процессора на упаковку и распаковку пакетов, превращая 5-секундную операцию в 14-минутное ожидание. Разберем подробно, как диагностировать эту проблему и какими способами можно отключить сжатие для оптимизации системы.
Рассмотрим ситуацию, когда документ на 30 000 строк записывается в базу за 2–5 секунд, но управление возвращается пользователю только через 800–900 секунд. Проанализируем, что происходит в этот момент. Платформа 1С по умолчанию использует режим усиленного сжатия. Когда объект такого объема передается с сервера на клиент (после выполнения серверного вызова), сервер начинает «жать» данные. Если вычислительных мощностей одного процесса rphost недостаточно или алгоритм работает в один поток, возникает огромная задержка. При этом сеть может быть загружена всего на 5–10%, а процессор клиента — простаивать.
Проверить влияние сжатия можно простым тестом: запустить тонкий клиент с параметром /TComp -None. Если время выполнения операции сокращается, например, с 14 минут до 40 секунд, значит, именно сжатие является «бутылочным горлышком». Выясним, как применить эти настройки массово и для разных типов клиентов. Для комплексной локализации задержек и анализа технологического журнала можно использовать инструмент для замера производительности контура 1С и поиска узких мест.
Самый прямой способ отключить сжатие — использовать ключ запуска /TComp. Этот параметр управляет режимом сжатия трафика между клиентским приложением и сервером 1С. Рассмотрим доступные значения:
-None — сжатие полностью отключено. Рекомендуется для быстрых локальных сетей (1 Гбит/с и выше).-Deflate — использование стандартного алгоритма deflate.-Server — (по умолчанию) выбор алгоритма остается за сервером.Чтобы не прописывать этот ключ вручную каждому пользователю, проанализируем возможности централизованной настройки. Мы можем использовать файлы списков общих информационных баз .v8i. В этом файле для конкретной базы можно указать строку дополнительных параметров запуска.
Посмотрим на пример структуры файла ibases.v8i с отключенным сжатием:
[Название Вашей Базы]
Connect=Srvr="ServerName";Ref="BaseName";
ID=8e56d628-9499-4a63-8e86-6ffae5b31ee8
OrderInList=1
ClientConnectionSpeed=Normal
App=Auto
WA=1
Version=8.3
AdditionalParameters=/TComp -None
Для массового внедрения этого решения системные администраторы могут использовать групповые политики (GPO) в домене Windows. Достаточно один раз подготовить эталонный файл ibases.v8i и настроить его копирование в профили пользователей по пути %AppData%\1C\1CEStart\. Таким образом, все клиенты получат настройку /TComp -None автоматически. При необходимости централизованной корректировки списков баз у пользователей домена можно применить скрипт для обновления файла ibases.v8i через GPO.
Важно понимать, что параметр /TComp полностью игнорируется веб-клиентом. При работе через браузер за сжатие данных отвечает не платформа 1С, а веб-сервер (IIS или Apache), который выступает прослойкой. Если веб-клиент «виснет» на больших документах, необходимо настроить сам веб-сервер.
Для веб-сервера IIS:
Для веб-сервера Apache:
В конфигурационном файле httpd.conf необходимо найти и закомментировать загрузку модуля mod_deflate или изменить настройки фильтров, чтобы исключить передачу данных 1С из процесса обработки сжатием. Проанализируем пример настройки:
# Закомментируйте эту строку для отключения сжатия
# LoadModule deflate_module modules/mod_deflate.so
После изменения настроек веб-сервера обязательно перезапустите службу (IIS или Apache), чтобы изменения вступили в силу.
Иногда отключение сжатия приводит к передаче очень больших пакетов, что может вызвать проблемы на уровне сетевого оборудования. Если вы используете сеть 10 Гбит/с, как в рассматриваемом нами случае, стоит обратить внимание на параметры MTU (Maximum Transmission Unit). Стандартный размер кадра 1500 байт заставляет систему дробить большие документы на тысячи мелких пакетов.
Рекомендуем включить Jumbo Frames (MTU 9000) на сетевых картах сервера и клиента (если они в одной подсети), а также на коммутаторах. Это позволит передавать данные огромными блоками, минимизируя нагрузку на процессоры по обработке сетевого стека.
Также полезно проверить состояние функций TCP Chimney Offload и Receive Segment Coalescing (RSC) на сервере 1С. В некоторых случаях они конфликтуют с логикой работы rphost. Для их отключения в командной строке (cmd) от имени администратора выполните:
netsh int tcp set global chimney=disabled
netsh int tcp set global autotuninglevel=disabled
Если административные меры не помогают, следует пересмотреть подход к разработке. Одной из главных причин долгого возврата управления является использование метода ДанныеФормыВЗначение для объектов с огромными табличными частями. Когда вы вызываете серверную процедуру с контекстом формы, 1С гоняет все 30 000 строк туда и обратно.
Проанализируем альтернативный подход. Вместо полной передачи контекста формы используйте внеконтекстные вызовы &НаСервереБезКонтекста. Передавайте только те данные, которые действительно изменились. Рассмотрим пример кода:
&НаСервереБезКонтекста
Процедура ЗаписатьДокументНаСервере(СсылкаНаДокумент, СтруктураИзменений)
// Получаем объект только на сервере по ссылке
ДокОбъект = СсылкаНаДокумент.ПолучитьОбъект();
// Применяем только измененные строки из структуры
// ... логика обновления ...
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецПроцедуры
Такой подход полностью исключает необходимость передачи «тяжелой» формы через механизмы сжатия платформы, так как между клиентом и сервером перемещается лишь небольшая структура с изменениями.
Мы выяснили, что универсальной «кнопки» на стороне сервера 1С для отключения сжатия не существует, так как инициатором режима обмена всегда выступает клиент. Тем не менее, проблему можно решить комплексно:
/TComp -None в общих списках баз (v8i).Применение этих мер позволит сократить время ожидания пользователя в десятки раз, сделав работу с объемными документами комфортной даже на стандартном серверном оборудовании.