При разработке и администрировании систем на платформе 1С:Предприятие часто возникает путаница в терминологии. Разработчики сталкиваются с понятиями «Кэш», «Сеансовые данные» и «Временное хранилище». Часто кажется, что это разные названия одного и того же процесса, но это не так. Разберем подробно внутреннее устройство платформы, чтобы раз и навсегда разграничить эти понятия.
Для начала проанализируем основное различие. Сеансовые данные — это низкоуровневый системный механизм платформы, инфраструктура, которую сервер 1С использует для хранения состояния работающих сеансов. В свою очередь, Временное хранилище — это программный интерфейс (API), предоставляемый платформой разработчику. Простыми словами: Временное хранилище — это инструмент, а Сеансовые данные — это место, где этот инструмент размещает свои объекты.
Рассмотрим аналогию: Сеансовые данные — это большой архивный шкаф в офисе (на сервере), выделенный под конкретного сотрудника (сеанс). В этом шкафу лежат его рабочие записи, параметры его кресла и освещения. Временное хранилище — это одна из полок в этом шкафу, которой сотрудник может пользоваться осознанно, чтобы положить туда какой-то документ для временной работы.
С точки зрения операционной системы, сеансовые данные представляют собой файлы в специальном каталоге на сервере приложений. Посмотрим на структуру пути: ...\srvinfo\reg_XXXX\snccntx. Аббревиатура snccntx расшифровывается как Session Context (контекст сеанса).
Выясним, как это работает на уровне процессов:
rmngr (менеджер кластера).snccntx для каждого активного сеанса (будь то тонкий клиент, фоновое задание или web-сервис) создается своя структура.Важный момент: если процесс менеджер кластера (rmngr) аварийно завершится, все данные из этой папки могут стать невалидными или потеряться. Это приведет к тому, что пользователи потеряют данные в открытых, но не записанных формах, а все ссылки на временное хранилище станут «битыми».
Проанализируем ситуацию: что именно платформа «складирует» в контексте сеанса, помимо того, что мы явно туда кладем программным кодом? Сеансовые данные включают в себя:
ТекущийПользователь), кэшируются здесь для быстрого доступа.snccntx.ПоместитьВоВременноеХранилище().Теперь разберем по шагам, что происходит, когда программист пишет код для работы с временным хранилищем. Рассмотрим пример помещения данных:
ДанныеДляХранения = Новый ДвоичныеДанные("C:\Temp\Report.pdf");
АдресХранилища = ПоместитьВоВременноеХранилище(ДанныеДляХранения, ЭтаФорма.УникальныйИдентификатор);
В этот момент платформа выполняет следующие действия:
ДанныеДляХранения превращается в поток байтов.rphost) к менеджеру кластера (rmngr).snccntx.e1cib/tempstore/uuid..., который является ключом для поиска этого файла в будущем.Рассмотрим критическое различие в «смерти» этих данных. Это поможет нам избежать ошибок утечки памяти на сервере.
Сеансовые данные в целом живут ровно столько, сколько существует сеанс пользователя. Как только пользователь закрывает программу или администратор завершает сеанс в консоли кластера, вся папка сеанса в snccntx удаляется операционной системой.
Временное хранилище имеет более сложную логику очистки, зависящую от второго параметра функции ПоместитьВоВременноеХранилище():
УникальныйИдентификатор формы, данные будут жить до тех пор, пока эта форма открыта. Как только форма закрывается, платформа автоматически удаляет этот кусок данных из сеансовых файлов.Проанализируем, почему понимание этих механизмов важно для системного администратора и ведущего разработчика. Поскольку сеансовые данные — это файлы на диске, работа с ними напрямую зависит от скорости дисковой подсистемы сервера.
Если программисты злоупотребляют временным хранилищем (например, помещают туда картинки высокого разрешения или огромные файлы Excel по 100 Мб), происходят следующие негативные процессы:
rphost и rmngr.snccntx заставляет головки жестких дисков (или контроллеры SSD) работать на пределе, что замедляет работу ВСЕХ пользователей базы, так как менеджер кластера один на всех.Выясним, как правильно работать с этими механизмами, чтобы система оставалась быстрой:
AppData\Local\1C) ускоряет интерфейс, а сеансовые данные на сервере (snccntx) обеспечивают логику работы сеанса. Очистка одного не заменяет очистку другого.УдалитьИзВременногоХранилища().ПараметрыСеанса тяжелые таблицы значений. Для этого лучше использовать временные таблицы БД или само временное хранилище с очень коротким жизненным циклом.srvinfo (где лежат сеансовые данные) крайне рекомендуется использовать быстрые NVMe или SSD накопители.Таким образом, мы выяснили, что Сеансовые данные — это фундамент, «черный ящик» платформы для хранения всего контекста работы пользователя, а Временное хранилище — это удобный инструмент для разработчика, позволяющий временно сохранять свои объекты в этом «ящике».