Как работает кэширование объектов в платформе 1С и как его очистить

· 9 мин

Содержание

Клиентский кэш объектов 1С очищается запуском базы с параметром /ClearCache или удалением папок кэша в профиле пользователя. Серверный кэш сбрасывается перезапуском рабочих процессов или очисткой каталога srvinfo при остановленной службе. Оба способа безопасны, если сначала закрыть сеансы и сделать резервную копию.

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

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

Где платформа держит временные данные

Кэш в 1С распределён по уровням системы. В клиент-серверном варианте их два, в файловом — один.

На клиенте. Платформа выгружает с сервера метаданные конфигурации, формы и настройки и складывает их в профиль пользователя Windows. Папки лежат по путям %LOCALAPPDATA%\1C\1Cv8\ и %APPDATA%\1C\1Cv8\. Внутри — подпапки с именами-хэшами, по одной на каждую подключённую базу, плюс файл ibases.v8i со списком баз.

На сервере (кластер). Рабочий процесс rphost держит в оперативной памяти метаданные, скомпилированные модули и данные активных сеансов. На диск, в рабочий каталог кластера srvinfo, пишутся данные сеансов (папки вида snccntx…), временные хранилища и служебные файлы. Путь к srvinfo задаётся в параметрах службы агента (-d).

В файловом варианте серверной части нет — весь кэш лежит только на клиенте, в профиле пользователя.

Если база файловая и лежит в сетевой папке, «серверного» кэша у неё всё равно нет. Любое ускорение и любая очистка — только на стороне клиента, то есть на том компьютере, где запущена 1С.

Виды кэша и как они влияют на скорость

Разные виды кэша ускоряют разные операции. И мешают тоже по-разному.

Вид кэшаГде хранитсяЧто ускоряетКогда мешает
Кэш конфигурации (метаданные)Профиль пользователяПервый запуск, открытие формПосле динамического обновления показывает старую структуру
Кэш форм и модулейПрофиль + память rphostПовторное открытие формФорма открывается с ошибкой после сбоя обновления
Кэш объектов сеансаПамять rphostПовторное чтение одного объекта в вызовеВнутри вызова возвращает устаревшую копию объекта
Данные сеансов (snccntx)Каталог srvinfoВосстановление сеанса, временные хранилищаРазрастаются и занимают место на диске

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

Отдельно стоит кэш конфигурации. При динамическом обновлении платформа меняет конфигурацию «на лету», но запущенные клиенты продолжают работать на её старой копии из кэша, пока не перезайдут. Поэтому после обновления часть пользователей какое-то время видит прежние формы и структуру — это не сбой, а штатная работа кэша.

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

Как очистить клиентский кэш

Два рабочих способа. Первый безопаснее, второй — когда первый не помог.

Способ 1. Запуск с параметром /ClearCache

Платформа умеет сбросить кэш конкретной базы при старте. Параметр /ClearCache чистит только её кэш и не трогает список баз и общие настройки.

Через командную строку для серверной базы:

"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" ENTERPRISE /S"сервер\имя_базы" /ClearCache

Для файловой базы вместо /S указывают путь:

"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" ENTERPRISE /F"C:\Базы\Моя_база" /ClearCache

Проще — через ярлык: в свойствах ярлыка 1С в конце поля Объект допишите пробел и /ClearCache. Один запуск очистит кэш, дальше параметр можно убрать.

Способ 2. Удаление папок кэша вручную

Если база не стартует и до параметра не добраться, папки удаляют напрямую.

  1. Закройте все окна 1С. Проверьте в диспетчере задач, что не осталось процессов 1cv8.exe и 1cv8c.exe — иначе файлы будут заняты.
  2. Откройте %LOCALAPPDATA%\1C\1Cv8\ (путь можно вставить прямо в адресную строку проводника).
  3. Удалите подпапки с длинными именами-хэшами. Файл ibases.v8i не трогайте — в нём список ваших баз.
  4. Повторите для %APPDATA%\1C\1Cv8\.
  5. Запустите 1С. Первый старт будет дольше обычного — платформа заново построит кэш.

Удаление папок сбрасывает кэш сразу для всех баз этого пользователя, а не только для проблемной. Если нужно почистить одну базу — используйте /ClearCache.

Серверный кэш и рабочие процессы

Серверный кэш живёт в памяти рабочих процессов rphost и на диске в srvinfo. Сбрасывается он перезапуском процессов и очисткой каталога.

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

  • Плановый перезапуск. В консоли администрирования серверов, в свойствах кластера, задайте интервал перезапуска рабочих процессов (в секундах) и допустимый объём памяти, при превышении которого процесс перезапускается. Кластер будет сам поднимать новый процесс и гасить старый без обрыва сеансов — пользователи переедут на новый процесс незаметно.
  • Отключение процесса. В списке Рабочие процессы поставьте у нужного Использовать = Нет. Кластер создаст новый процесс, а старый остановится, когда с него уйдут сеансы.
  • Принудительное завершение. Снять rphost.exe в диспетчере задач — агент ragent поднимет новый. ⚠️ Это оборвёт все сеансы, работавшие на этом процессе, с потерей несохранённых данных. Только как крайняя мера и вне рабочего времени.

Очистка каталога srvinfo нужна, когда папки snccntx… разрослись или сеансы подвисли.

  1. Предупредите пользователей и дождитесь, пока они выйдут.
  2. Остановите службу Агент сервера 1С:Предприятия (ragent). ⚠️ Все сеансы оборвутся, базы станут недоступны.
  3. В каталоге srvinfo, внутри папки кластера, удалите папки snccntx… — это данные сеансов, они пересоздадутся.
  4. Не удаляйте папку reg_<порт> целиком — это реестр кластера с настройками всех баз и администраторов.
  5. Запустите службу обратно.

Перезапуск rphost сбрасывает кэш в памяти, но не чистит snccntx на диске. Если место на диске кончается именно из-за данных сеансов — нужен шаг с остановкой службы.

Когда данные устаревают: диагностика

Чаще всего «кэш виноват» в трёх ситуациях: после обновления, при ошибке открытия формы и при повторном чтении объекта в коде. Разберём по симптомам.

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

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

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

Как настроить платформу, чтобы кэш не мешал

Очистка кэша — лечение симптома. Чтобы чистить приходилось реже, настройте систему заранее.

  • 💾 Не чистите кэш «на всякий случай». После очистки первый запуск медленнее — платформа строит кэш с нуля. Чистите только когда есть конкретная проблема.
  • 🧠 Дайте рабочим процессам достаточно оперативной памяти. Если кэш помещается в память rphost, база не упирается в диск. Нехватка RAM — частая причина тормозов, которые путают с «грязным кэшем».
  • 💽 Положите srvinfo и каталог временных файлов на SSD. Данные сеансов и временные хранилища активно пишутся на диск, и скорость диска напрямую влияет на отзывчивость.
  • 🔁 Настройте плановый перезапуск rphost (например, раз в сутки ночью) и порог по памяти. Это сбрасывает накопленный кэш и страхует от утечек без ручного вмешательства.
  • 🕐 Обновляйте конфигурацию вне рабочего времени. После обновления пользователи перезаходят, и клиентский кэш обновляется у всех сразу, без ошибок открытия форм в разгар дня.
  • 🧹 Следите за каталогом временных файлов. Платформа активно пишет во временную папку пользователя и в srvinfo; если диск забит под завязку, тормоза и ошибки записи легко принять за проблему кэша.

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

Очистка кэша не заменяет исправление базы

Очистку кэша часто путают с лечением самой базы. Это разные инструменты, и когда база действительно повреждена, очистка кэша не поможет.

Если симптомы серьёзнее устаревших форм — ошибки при проведении документов, «падения» платформы на конкретных операциях, сообщения о нарушении целостности — работают с самой базой:

  • Файловая база. Проверка физической целостности делается утилитой chdbfl.exe из каталога bin установленной платформы. База при этом должна быть закрыта для всех.
  • Любая база. В Конфигураторе есть режим Администрирование → Тестирование и исправление информационной базы — он проверяет логическую целостность и пересчитывает итоги. ⚠️ Запускается в монопольном режиме, пользователи должны выйти, и обязательно с резервной копией.

Перед тестированием и исправлением обязательно сделайте резервную копию: часть режимов меняет данные необратимо.

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

Частые ошибки при очистке кэша

Эти ошибки превращают простую очистку в потерю данных или настроек.

  • ❌ Удаляют папки, не закрыв 1С. Файлы заняты процессом, часть не удаляется, кэш тут же строится заново — эффекта ноль.
  • ❌ Сносят ibases.v8i вместе с кэшем. Пропадает список баз в окне запуска, базы приходится подключать заново вручную.
  • ❌ Удаляют на сервере папку reg_<порт>. Вместе с «мусором» уходят настройки кластера, список баз и учётки администраторов. Восстановление — только из резервной копии.
  • ❌ Останавливают службу ragent в рабочее время без предупреждения. Все теряют несохранённые данные, а вы — доверие коллег.
  • ❌ Чистят кэш вместо решения проблемы. Если причина в незавершённом динамическом обновлении или в блокировках, очистка даст временный эффект, и ошибка вернётся.

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

Нужно ли чистить кэш после каждого обновления?
Нет. Платформа обновляет кэш сама при перезаходе пользователя. Ручная очистка нужна только при ошибках открытия форм или устаревшей структуре.
Потеряю ли я данные, если очищу кэш?
Рабочие данные нет — они хранятся в базе, а кэш лишь их копия. Потеряются только несохранённые изменения в открытых в момент очистки формах.
Где находится кэш у файловой базы?
Только на клиенте, в профиле пользователя: %LOCALAPPDATA%\1C\1Cv8\ и %APPDATA%\1C\1Cv8\. Серверной части у файловой базы нет.
Можно ли чистить кэш, пока в базе работают другие?
Свой клиентский кэш — да, он у каждого пользователя свой. Серверный кэш и каталог srvinfo — нет: остановка службы оборвёт все сеансы.
Чем `/ClearCache` лучше удаления папок вручную?
Параметр чистит кэш только нужной базы и не задевает список баз и общие настройки. Удаление папок сбрасывает кэш сразу для всех баз пользователя.