При администрировании высоконагруженных систем «1С:Предприятие 8.3» одной из критических точек производительности становится скорость работы дисковой подсистемы с сеансовыми данными. Официальная документация рекомендует располагать эти данные на максимально быстрых носителях, в идеале — на RAM-drive (виртуальном диске в оперативной памяти). Однако стандартный механизм платформы предлагает перенос всего рабочего каталога целиком, что не всегда удобно, так как вместе с сеансовыми данными переносятся огромные индексы полнотекстового поиска и журналы регистрации.
В этой статье мы подробно рассмотрим, как разделить эти данные и направить на RAM-диск только то, что действительно требует экстремальной скорости доступа. Мы разберем механизмы работы платформы, использование символических ссылок и автоматизацию процесса.
Рассмотрим ситуацию: администратор решает ускорить работу кластера. В строке запуска службы агента сервера 1С (ragent.exe) указывается параметр -d, который определяет путь к рабочему каталогу. По умолчанию это C:\Program Files\1cv8\srvinfo.
Проанализируем структуру этого каталога (для детального анализа содержимого srvinfo существуют специализированные инструменты). Внутри него находятся:
snccntx внутри каталога конкретного кластера, например, reg_1541).Если мы укажем RAM-диск в параметре -d, то платформа попытается уместить в оперативной памяти абсолютно все эти данные. Для крупных баз данных это практически невозможно. Наша задача — выяснить, как вынести на быстрый носитель только папку snccntx, оставив тяжелые логи на обычном SSD или HDD.
Выясним причину, почему именно сеансовые данные так важны. В версиях 8.3 сеансовые данные включают в себя состояние параметров сеанса, временные данные блокировок и кэши. Основная нагрузка идет на запись и чтение множества мелких файлов. Именно поэтому использование RAM-диска дает такой ощутимый прирост: время отклика (latency) оперативной памяти на порядки ниже, чем у любого физического диска.
Важно помнить, что начиная с версии 8.3.15, механизмы работы с сеансовыми данными были оптимизированы, и платформа стала более бережно относиться к дисковому вводу-выводу. Тем не менее, для систем с тысячами активных пользователей проблема остается актуальной.
Поскольку 1С не предоставляет штатной возможности указать отдельный путь только для snccntx, мы воспользуемся возможностями операционной системы по созданию символических ссылок или соединений (Junctions). Рассмотрим этот процесс по шагам.
Шаг 1. Подготовка RAM-диска
Прежде всего, необходимо создать виртуальный диск в оперативной памяти. Для этого используются сторонние утилиты (например, ImDisk или софт от производителей памяти). Предположим, наш RAM-диск имеет букву R:.
Шаг 2. Остановка службы 1С
Перед любыми манипуляциями с файловой структурой необходимо полностью остановить службу 1C:Enterprise 8.3 Server Agent. Убедимся, что процессы rphost, rmngr и ragent завершены.
Шаг 3. Перенос данных и создание ссылки
Найдем папку с сеансовыми данными. Обычно путь выглядит так:
C:\Program Files\1cv8\srvinfo\reg_1541\snccntx
Нам нужно переместить содержимое этой папки на диск R: и создать на месте старой папки ссылку, указывающую на новое местоположение. В Windows для этого используется команда mklink.
Разберем пример команды для командной строки (запущенной от имени администратора):
rem Переходим в каталог кластера
cd /d "C:\Program Files\1cv8\srvinfo\reg_1541"
rem Удаляем пустую или старую папку (предварительно сохранив данные, если нужно)
rmdir /s /q snccntx
rem Создаем символическую ссылку на RAM-диск
mklink /d snccntx "R:\1C_Session_Data"
Теперь для платформы 1С путь остался прежним, но физически запись будет происходить в оперативную память.
Проанализируем ситуацию, упомянутую в обсуждении: «имя папки при перезапуске каждый раз новое». На самом деле, идентификатор кластера (например, reg_1541) остается постоянным, пока вы не пересоздадите кластер в консоли администрирования. Однако, если у вас несколько рабочих серверов или вы часто пересоздаете инстансы, GUID папок могут измениться. В этом случае скрипт автоматизации должен уметь находить актуальную папку по маске или через анализ реестра кластера.
Главная проблема RAM-диска — данные на нем исчезают после перезагрузки сервера. Если служба 1С запустится раньше, чем будет создана структура папок и символическая ссылка, сервер создаст обычную папку на жестком диске, и вся оптимизация пропадет. Рассмотрим правильный алгоритм автозапуска:
R:.srvinfo.mklink.USR1CV8).Пример простого .bat скрипта для автоматизации:
@echo off
set RAM_PATH=R:\1C_Sessions
set SRV_PATH="C:\Program Files\1cv8\srvinfo\reg_1541\snccntx"
if not exist %RAM_PATH% mkdir %RAM_PATH%
icacls %RAM_PATH% /grant USR1CV8:(OI)(CI)F /T
if exist %SRV_PATH% rmdir %SRV_PATH%
mklink /d %SRV_PATH% %RAM_PATH%
net start "1C:Enterprise 8.3 Server Agent"
Проанализируем, стоит ли тратить время на настройку RAM-диска сегодня. С появлением накопителей NVMe и технологии Intel Optane (в режиме Persistent Memory или высокоскоростного хранилища), необходимость в RAM-дисках для сеансовых данных снизилась.
Если вы используете промышленный NVMe-накопитель, задержки при записи становятся настолько малы, что они перестают быть «бутылочным горлышком». В этом случае мы рекомендуем использовать стандартный параметр -d и просто перенести весь рабочий каталог (включая журналы и индексы) на такой диск. Это гораздо надежнее, так как исключает риск потери данных при сбое питания и упрощает процедуру обслуживания сервера.
Мы рассмотрели два основных способа ускорения работы с сеансовыми данными:
snccntx на RAM-диск, не забивая оперативную память логами и индексами. Требует тщательной настройки скриптов автозапуска.Выясним, какой метод выбрать вам. Если бюджет ограничен, но есть свободная оперативная память — используйте mklink и RAM-диск. Если вы строите новую отказоустойчивую систему — отдайте предпочтение скоростным физическим накопителям.