Сервер 1С:Предприятия изнутри: кто держит сеансы, исполняет код и говорит с СУБД

· 10 мин

Содержание

Сервер 1С — это посредник между пользователями и базой данных. Он принимает подключения клиентов, исполняет серверный код конфигурации, превращает запросы на языке 1С в SQL для СУБД, держит блокировки, выполняет фоновые и регламентные задания и раздаёт лицензии.

Пользователь видит только форму документа. Всё тяжёлое — проведение, отчёты, обмены — считает сервер. Ниже разобрано, из каких процессов он состоит, за что отвечает каждый и где смотреть, если что-то пошло не так. Речь о платформе 1С:Предприятие 8.3, схема одинакова для любой конфигурации: БП, ЗУП, УТ, ERP.

Трёхзвенная архитектура: где стоит сервер 1С и зачем он нужен

В клиент-серверном варианте работы три звена:

ЗвеноЧто этоЧто делает
КлиентТонкий клиент, веб-клиент, толстый клиентПоказывает формы, принимает ввод, исполняет код &НаКлиенте
Сервер 1С (кластер)Служба «Агент сервера 1С:Предприятия 8.3» и её процессыИсполняет серверный код, держит сеансы, блокировки, задания
СУБДMS SQL Server, PostgreSQL, IBM Db2, Oracle DatabaseХранит таблицы базы, выполняет SQL

Клиент никогда не обращается к СУБД напрямую. Даже простое открытие списка документов — это запрос к серверу 1С, который сам идёт в базу и возвращает клиенту только нужную порцию строк.

Чем это отличается от файловой базы

В файловом варианте сервера нет. Каждый клиент сам открывает файл 1Cv8.1CD, сам читает и пишет данные. Пока пользователей трое-пятеро, это работает. Дальше начинаются проблемы:

  • 🐢 по сети гоняются целые блоки файла, а не результат запроса;
  • 🔒 блокировки грубее — одновременная запись в одни таблицы чаще ждёт;
  • 💥 обрыв сети у одного клиента может повредить файл базы;
  • 📈 нет инструментов для анализа нагрузки и управления сеансами.

Сервер 1С снимает эти ограничения: данные лежат в СУБД, которая умеет транзакции и восстановление, а клиенты получают от сервера только результат.

Сервер 1С и сервер СУБД могут стоять на одной машине. Для 10–30 пользователей это нормальная схема. Разносить их на разные серверы имеет смысл, когда упираетесь в память или процессор.

Из каких процессов состоит сервер 1С

Служба сервера на самом деле — несколько процессов. Это важно знать: в диспетчере задач вы увидите именно их.

ПроцессПорт по умолчаниюРоль
ragent1540Агент сервера. Точка входа: принимает первичное подключение, хранит список кластеров, через него работает консоль администрирования
rmngr1541Менеджер кластера. Хранит реестр кластера, регистрирует базы и сеансы, распределяет клиентов по рабочим процессам, ведёт сервисы кластера
rphostдиапазон 1560–1591Рабочий процесс. Исполняет код конфигурации и запросы к СУБД
ras1545Сервер администрирования. Нужен для утилиты rac и сторонних консолей; ставится и запускается отдельно

Диапазон портов рабочих процессов задаётся в свойствах рабочего сервера в консоли. Если между клиентами и сервером стоит брандмауэр, открывать нужно и 1540, и 1541, и весь диапазон — иначе клиент подключится к агенту и «повиснет» на следующем шаге.

Как проходит подключение

  1. Клиент обращается к агенту ragent на порт 1540 и называет базу.
  2. Агент передаёт его менеджеру кластера rmngr.
  3. Менеджер выбирает рабочий процесс rphost с наименьшей нагрузкой и сообщает клиенту его адрес.
  4. Дальше клиент общается напрямую с рабочим процессом.

Где всё это хранится на диске: каталог srvinfo (по умолчанию C:\Program Files\1cv8\srvinfo в Windows). Внутри — папка reg_1541 с реестром кластера (файл 1CV8Clst.lst), списком баз и их служебными данными.

Кластер, базы и сеансы: что сервер 1С держит в памяти

Кластер — это логическая единица: один или несколько рабочих серверов, которые обслуживают общий набор информационных баз. На небольшом предприятии кластер обычно один и сервер в нём тоже один.

Регистрация информационной базы

Чтобы база заработала в клиент-серверном режиме, её регистрируют в кластере. В карточке базы указывают:

  • имя базы в кластере (его клиент пишет в строке подключения Srvr="server";Ref="buh";);
  • тип СУБД, адрес сервера СУБД и имя базы данных в нём;
  • пользователя СУБД и пароль;
  • флаги «Блокировка начала сеансов включена» и «Блокировка регламентных заданий включена».

Сервер хранит эти параметры у себя. Пользователю не нужно знать пароль СУБД — к базе данных ходит только сервер 1С.

Сеансы и соединения

Для каждого пользователя сервер создаёт сеанс — объект с параметрами сеанса, правами, временными данными форм. Сеанс живёт, пока клиент работает. Соединение — это канал связи между клиентом и рабочим процессом; сеанс может переезжать между соединениями.

Что видно в списке сеансов консоли:

  • 👤 пользователь и компьютер;
  • 🖥 приложение (тонкий клиент, конфигуратор, фоновое задание, COM-соединение);
  • ⏱ время начала и последней активности;
  • 🔑 полученная лицензия;
  • 📊 время вызовов, объём прочитанных и записанных данных.

Сервисы кластера

Помимо процессов, менеджер кластера ведёт набор сервисов. Самые заметные:

  • сервис блокировок — управляемые блокировки данных при записи и проведении;
  • сервис журналов регистрации — запись журнала регистрации базы;
  • сервис сеансовых данных — хранение временных данных сеансов;
  • сервис заданий — запуск фоновых и регламентных заданий;
  • сервис лицензирования — выдача клиентских лицензий;
  • сервис полнотекстового поиска — индекс поиска по данным.

Где именно какой сервис работает, в многосерверном кластере управляется «требованиями назначения функциональности» в свойствах рабочего сервера.

Лицензии

На сервер нужна своя лицензия: без неё рабочие процессы не стартуют. Клиентские лицензии сервер тоже может выдавать сам — для этого в свойствах базы или кластера разрешают получение лицензий сервером. Тогда ключи или программные лицензии ставят один раз на сервер, а не на каждый компьютер.

Рабочие процессы rphost: как сервер выполняет код конфигурации

Вся бизнес-логика серверной части исполняется в rphost. Когда пользователь нажимает «Провести», происходит примерно следующее:

  1. Клиент передаёт на сервер форму с данными документа.
  2. Рабочий процесс выполняет модуль объекта: проверки, ПередЗаписью, ОбработкаПроведения.
  3. Формируются движения регистров, при необходимости ставятся управляемые блокировки.
  4. Транзакция уходит в СУБД и фиксируется.
  5. Клиенту возвращается результат — или текст ошибки.

Код, помеченный &НаСервере и &НаСервереБезКонтекста, модули менеджеров, общие модули с флагом «Сервер», обработчики регламентных заданий — всё это выполняет rphost. Код &НаКлиенте работает на компьютере пользователя.

Сколько рабочих процессов и почему

Один rphost обслуживает много соединений одновременно. В свойствах рабочего сервера задают, сколько баз и соединений допустимо на процесс; когда лимит исчерпан, менеджер кластера запускает новый процесс. На 64-битном сервере процесс может занимать много памяти, поэтому важны ограничения.

Ключевые параметры в свойствах рабочего сервера:

ПараметрЗачем нужен
Критический объём памяти процессовПорог, при достижении которого сервер начинает защищаться: обрывает самые «тяжёлые» вызовы
Безопасный расход памяти за один вызовВызов, превысивший порог, прерывается с ошибкой, а не валит процесс
Количество ИБ на процесс / соединений на процессВлияет на то, когда запускается новый rphost

В свойствах кластера дополнительно есть интервал перезапуска рабочих процессов. При перезапуске новый процесс поднимается заранее, а старый завершается, когда освобождается.

Принудительное завершение rphost из диспетчера задач обрывает все сеансы, которые на нём работали, и откатывает их незафиксированные транзакции. Делайте это только когда процесс завис и перед этим предупредите пользователей.

Сервер 1С и СУБД: как запросы превращаются в SQL

Запрос на языке 1С (ВЫБРАТЬ … ИЗ Документ.РеализацияТоваровУслуг) СУБД не понимает. Рабочий процесс:

  1. Разбирает текст запроса.
  2. Подставляет реальные имена таблиц и полей (_Document123, _Fld456).
  3. Добавляет условия ограничения доступа (RLS), если они есть у роли пользователя.
  4. Формирует SQL под конкретную СУБД — диалекты MS SQL и PostgreSQL различаются.
  5. Отправляет SQL, получает результат и возвращает его в виде таблицы значений или выборки.

Отсюда практические выводы:

  • 📌 медленный отчёт почти всегда медленный на уровне SQL: искать причину нужно в плане запроса СУБД, а не в «слабом сервере 1С»;
  • 📌 виртуальные таблицы регистров (Остатки, ОстаткиИОбороты) с параметрами работают быстрее, чем отбор в ГДЕ по уже полученному результату — сервер подставляет параметры прямо в SQL и использует итоги;
  • 📌 запросы в цикле — частая причина нагрузки: сотни мелких обращений к СУБД вместо одного пакетного.

Транзакции и блокировки

Сервер 1С управляет транзакциями. В режиме управляемых блокировок (стандарт для современных конфигураций) он сам решает, какие записи заблокировать, через сервис блокировок кластера. СУБД при этом держит свои блокировки только на время записи.

Типичная ошибка, которую выдаёт именно сервер, — Конфликт блокировок при выполнении транзакции: Превышено максимальное время ожидания предоставления блокировки. Она значит, что одна транзакция слишком долго держит данные, а вторая устала ждать. Лечится не на уровне сервера, а поиском долгой транзакции.

Обслуживание базы в СУБД

Сервер 1С не делает регламент СУБД за администратора. Обновление статистики, перестроение индексов и резервное копирование настраивают в самой СУБД: в MS SQL — планами обслуживания, в PostgreSQL — VACUUM ANALYZE и заданиями по расписанию. Без этого запросы со временем деградируют, и кажется, что «тормозит 1С».

Фоновые задания и регламентные операции на сервере

Фоновое задание — это процедура, которую сервер выполняет в отдельном сеансе без участия пользователя. Клиент запускает его и продолжает работать, не дожидаясь окончания. Так устроены длительные операции: формирование тяжёлых отчётов, закрытие месяца , пересчёт итогов, загрузка курсов.

Регламентное задание — фоновое задание по расписанию. Расписание хранится в базе, а запускает его сервис заданий кластера. Примеры в типовых конфигурациях:

Что важно знать администратору

  • Регламентные задания выполняются, только если база работает в клиент-серверном режиме или в файловой базе открыт хотя бы один клиент. В клиент-серверной базе они идут даже ночью, когда никого нет.
  • Флаг «Блокировка регламентных заданий включена» в карточке базы в консоли кластера отключает их все разом. Его ставят на копиях рабочей базы, чтобы тестовая база не отправила обмен или документы ЭДО от имени организации.
  • Список заданий и их статус смотрят в самой конфигурации: в БСП-конфигурациях это обработка «Регламентные и фоновые задания» в разделе Администрирование → Обслуживание.

Скопировали рабочую базу для тестов — сразу заблокируйте регламентные задания. Иначе копия начнёт отправлять отчётность, загружать документы ЭДО и запускать обмены параллельно с рабочей базой.

Мониторинг и администрирование сервера 1С

Основной инструмент — консоль администрирования серверов 1С:Предприятия (оснастка MMC в Windows). Она подключается к агенту сервера и показывает дерево: кластеры → информационные базы → сеансы, соединения, блокировки; рабочие серверы → рабочие процессы.

Что делают в консоли чаще всего:

  • смотрят, кто сидит в базе, и завершают зависший сеанс;
  • ставят блокировку начала сеансов перед обновлением;
  • регистрируют новую базу или правят параметры подключения к СУБД;
  • смотрят загрузку рабочих процессов: память, количество соединений, среднее время вызова.

Если консоль не открывается с ошибкой о классе или компоненте, обычно помогает перерегистрация radmin.dll нужной версии платформы командой regsvr32 из-под администратора.

Утилита rac

Для скриптов и серверов без графической оболочки есть rac. Она работает через сервер администрирования ras, поэтому сначала запускают его. Базовые команды:

rac cluster list
rac infobase summary list --cluster=<id_кластера>
rac session list --cluster=<id_кластера>
rac process list --cluster=<id_кластера>

Полный список команд и параметров выводит rac help.

Технологический журнал

Когда консоли недостаточно — нужен технологический журнал. Его включают файлом logcfg.xml в каталоге conf платформы. В нём задают, какие события писать: исключения (EXCP), длительные вызовы, ожидания на блокировках (TLOCK, TTIMEOUT), взаимоблокировки (TDEADLOCK). По этим логам находят, какой запрос или какая транзакция тормозит базу.

Журнал с широким набором событий за час может вырасти до гигабайтов. Включайте его на время диагностики, с ограничением срока хранения в logcfg.xml, и следите за свободным местом на диске.

Если сервер «тормозит» или падает

Диагностика: выберите симптом

Частые вопросы о сервере 1С

Можно ли поставить сервер 1С на Linux?
Да. Сервер 1С:Предприятия 8.3 есть для Windows и Linux, в паре с Linux обычно используют PostgreSQL. Клиенты при этом могут оставаться на Windows.
С какого количества пользователей нужен сервер 1С?
Жёсткой границы нет. Файловая база комфортна примерно до 5–10 одновременных пользователей; при большем числе, тяжёлых обменах или работе через интернет клиент-серверный вариант заметно стабильнее.
Сервер 1С хранит данные базы?
Нет. Данные лежат в СУБД. Сервер 1С хранит только реестр кластера, служебные кэши и сеансовые данные в каталоге srvinfo. Резервную копию делают средствами СУБД или выгрузкой .dt.
Нужна ли отдельная лицензия на сервер?
Да. Сервер 1С лицензируется отдельно от клиентских лицензий, и бывает в 32- и 64-битном исполнении. Клиентские лицензии при этом нужны по числу одновременно работающих пользователей.
Можно ли запустить на одном компьютере несколько версий сервера 1С?
Можно, если каждый экземпляр агента работает на своих портах (например, 1540, 2540 и т. д.) и со своим каталогом srvinfo. Так часто держат тестовый сервер рядом с рабочим.