Решение задач 1С:Предприятие 8 на примерах

Кэш сервера 1С и кэш клиента: как правильно очистить

Базы данных и СУБДОпубликовано

Очистка кэша — частый совет при странных ошибках 1С, но у клиента и у сервера кэши разные, и чистить их нужно по-разному. В статье — что именно кэширует 1С, как очистить кэш клиента параметром /ClearCache и вручную на Windows и Linux, где лежит кэш сервера 1С в каталоге srvinfo, как почистить его с блокировкой сеансов через консоль или rac и что не трогать, чтобы не сломать кластер.

Что кэширует 1С и когда кэш мешает

Под словами «кэш 1С» обычно имеют в виду два разных хранилища:

  • Кэш клиента — данные на компьютере пользователя. Главная его часть — кэш клиент-серверных вызовов: метаданные форм, модули и другие сведения о конфигурации, которые клиент сохраняет, чтобы не загружать их с сервера при каждом запуске.
  • Кэш сервера 1С — сеансовые данные кластера. В них хранятся временное хранилище и служебная информация сеансов. За ними отвечает менеджер кластера rmngr, а на диске это каталоги snccntx<GUID> внутри каталога кластера.

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

Как очистить кэш 1С на компьютере пользователя

Параметр /ClearCache

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

  1. В окне запуска 1С выделите базу и нажмите «Изменить».
  2. Пройдите до последнего шага мастера и в поле «Дополнительные параметры запуска» впишите /ClearCache.
  3. Нажмите «Готово» и запустите базу.
  4. После успешного запуска удалите параметр, иначе кэш будет сбрасываться при каждом входе, и запуск станет медленнее.

Тот же ключ можно указать в ярлыке:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S "srv01\trade" /ClearCache

Удаление папок кэша вручную

Если /ClearCache не помог или база не запускается вовсе, удалите кэш вручную. Сначала закройте все окна 1С на компьютере. Кэш лежит в профиле пользователя, в подкаталогах с именами-идентификаторами (GUID) — по одному на каждую базу из списка:

ОСКаталоги кэшаЧто не трогать
Windows%APPDATA%\1C\1cv8\ и %LOCALAPPDATA%\1C\1cv8\Список баз %APPDATA%\1C\1CEStart\ibases.v8i
Linux~/.1cv8/1C/1cv8/Список баз ~/.1C/1cestart/ibases.v8i

Чтобы очистить кэш только одной базы, найдите её идентификатор в файле ibases.v8i — это значение строки ID в разделе базы — и удалите папки с таким же именем в обоих каталогах:

[Торговля]
Connect=Srvr="srv01";Ref="trade";
ID=3f6a2c1e-8d4b-4f0a-9c55-2b7e1a9d0c11
...

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

@echo off
rem Перед запуском закройте все окна 1С
for /d %%D in ("%APPDATA%\1C\1cv8\*-*-*-*-*") do rd /s /q "%%D"
for /d %%D in ("%LOCALAPPDATA%\1C\1cv8\*-*-*-*-*") do rd /s /q "%%D"
echo Кэш 1С очищен

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

Терминальный сервер и много пользователей

На терминальном сервере у каждого пользователя свой профиль, а значит, и свой кэш. Очистка в одном профиле не помогает остальным: командный файл нужно выполнить от имени каждого пользователя, например сценарием входа в систему, или пройтись по каталогам профилей от имени администратора, когда все сеансы 1С закрыты. Пример для администратора, который чистит кэш во всех профилях сервера:

Get-ChildItem "C:\Users" -Directory | ForEach-Object {
    foreach ($sub in "AppData\Roaming\1C\1cv8", "AppData\Local\1C\1cv8") {
        $path = Join-Path $_.FullName $sub
        if (Test-Path $path) {
            Get-ChildItem $path -Directory |
                Where-Object { $_.Name -match '^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$' } |
                Remove-Item -Recurse -Force
        }
    }
}

Регулярное выражение отбирает только папки с именами в формате GUID, так что настройки и список баз остаются на месте. Если профили перемещаемые, кэш из Roaming может вернуться с сервера профилей, поэтому чистите его и там. После массового обновления конфигурации полезнее разово запустить базу с /ClearCache у всех пользователей, чем удалять кэш по расписанию.

Веб-клиент

Веб-клиент не использует каталоги платформы: его файлы кэширует браузер. Очистите кэш браузера для адреса публикации или откройте базу в приватном окне. Если после обновления платформы веб-клиент ведёт себя странно, проверьте и саму публикацию на веб-сервере.

Кэш сервера 1С: где он лежит

Каталог данных кластера по умолчанию: в Windows — srvinfo в каталоге установки (например, C:\Program Files\1cv8\srvinfo), в Linux — /home/usr1cv8/.1cv8/1C/1cv8. Путь может быть переопределён ключом -d в параметрах запуска агента сервера. Внутри него:

ОбъектЧто этоМожно ли удалять
reg_1541Каталог кластера; число совпадает с портом менеджера кластераНет
reg_1541\1CV8Clst.lstРеестр кластера: базы, настройки, администраторыНет — потеряете настройки кластера
reg_1541\<GUID базы>Данные базы на сервере: журнал регистрации, индексы полнотекстового поискаНет, если база используется
reg_1541\snccntx<GUID>Сеансовые данные — то, что называют кэшем сервераДа, только при остановленной службе

Сеансовые данные могут занимать много места. Методика 1С отдельно предупреждает: следите за свободным местом на диске с сеансовыми данными и не размещайте на нём технологический журнал — нехватка места сказывается на стабильности сервера.

Как почистить кэш на сервере 1С

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

  1. Предупредите пользователей. Для каждой базы включите блокировку начала сеансов и регламентных заданий.
  2. Завершите оставшиеся сеансы.
  3. Остановите службу агента сервера и убедитесь, что процессы ragent, rmngr и rphost завершились.
  4. Перенесите каталоги snccntx* в резервную папку вне каталога кластера (надёжнее, чем сразу удалять).
  5. Запустите службу, снимите блокировки и проверьте вход в базы.
  6. Если всё работает, удалите перенесённые каталоги.

Блокировку и завершение сеансов удобно выполнить утилитой rac — так работают и на Linux, и в скриптах. Сервер администрирования ras должен быть запущен:

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

rac infobase --cluster=<id_кластера> update --infobase=<id_базы> \
  --infobase-user="Администратор" --infobase-pwd="пароль" \
  --sessions-deny=on --scheduled-jobs-deny=on \
  --denied-message="Обслуживание сервера" --permission-code=7351

rac session --cluster=<id_кластера> list --infobase=<id_базы>
rac session --cluster=<id_кластера> terminate --session=<id_сеанса>

В Windows те же действия доступны в консоли «Администрирование серверов 1С:Предприятия»: свойства базы — блокировка начала сеансов, раздел «Сеансы» — удаление сеанса. Подробнее о консоли и rac — в статье про сервер 1С:Предприятия и кластер.

Остановка службы и перенос каталогов в Windows (PowerShell от имени администратора):

$svc = Get-Service | Where-Object { $_.DisplayName -like "*1C:Enterprise*Server Agent*" }
$svc | Stop-Service

$reg = "C:\Program Files\1cv8\srvinfo\reg_1541"
$bak = "D:\1c_snccntx_backup\" + (Get-Date -Format "yyyyMMdd_HHmm")
New-Item -ItemType Directory -Path $bak -Force | Out-Null
Get-ChildItem $reg -Directory -Filter "snccntx*" | Move-Item -Destination $bak

$svc | Start-Service

В Linux начиная с версии 8.3.21 сервер управляется юнитом systemd, в имени которого есть номер версии; в более старых установках служба называлась srv1cv83:

sudo systemctl stop srv1cv8-8.3.27.xxxx@default
sudo mkdir -p /var/backups/snccntx
sudo find /home/usr1cv8/.1cv8/1C/1cv8/reg_1541 -maxdepth 1 -type d -name 'snccntx*' \
  -exec mv {} /var/backups/snccntx/ \;
sudo systemctl start srv1cv8-8.3.27.xxxx@default

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

Кэш на уровне конфигурации: повторно используемые значения

Есть и третий кэш, который часто путают с первыми двумя: общие модули со свойством «Повторное использование возвращаемых значений» («На время вызова» или «На время сеанса»). Функции таких модулей запоминают результат, и если значение константы или настройки изменилось в течение сеанса, пользователь продолжает видеть старое. Чистить файлы здесь бесполезно. Нужно либо перезапустить сеанс, либо сбросить кэш программно:

&НаСервере
Процедура ВключитьУчетПоЯчейкамНаСервере()

    Константы.ИспользоватьСкладскиеЯчейки.Установить(Истина);

    // Сбрасываем кэш повторно используемых значений текущего сеанса,
    // чтобы функции общих модулей с повторным использованием
    // вернули уже новое значение константы
    ОбновитьПовторноИспользуемыеЗначения();

КонецПроцедуры

Метод действует только на текущий сеанс: у других пользователей кэш «на время сеанса» обновится после перезапуска их сеансов.

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

  • Удалять весь каталог reg_1541 или файл 1CV8Clst.lst вместо сеансовых данных — кластер теряет список баз и настройки.
  • Чистить snccntx при работающей службе: файлы заняты, а частичное удаление может привести к новым ошибкам.
  • Оставлять /ClearCache в параметрах запуска навсегда — каждый вход становится медленнее.
  • Удалять ibases.v8i вместе с кэшем — пропадает список баз пользователя.
  • Чистить кэш сервера, когда ошибка только у одного пользователя: сначала очистите кэш на его компьютере, как описано в статье про ошибку формата потока.
  • Ждать, что очистка кэша исправит ошибку в данных или конфигурации. Если проблема повторяется, ищите причину в журналах — общий порядок разбора есть в статье про ошибки при запуске 1С.

Актуальность для новых версий

Расположение кэша клиента и каталога кластера, параметр /ClearCache и устройство сеансовых данных (snccntx в каталоге reg_<порт>) не меняются в пределах версии 8.3. С версии 8.3.21 сервер на Linux запускается юнитом systemd с номером версии в имени, раньше служба называлась srv1cv83. В документации к ветке 8.5 описание /ClearCache расширено: очищаются служебные данные в каталоге данных приложения, поэтому сверяйтесь с «Руководством администратора» своего релиза на ИТС.

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

Где хранится кэш 1С на компьютере пользователя?

В Windows — в папках %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8, в подкаталогах с именами-идентификаторами баз. В Linux — в ~/.1cv8/1C/1cv8. Список баз хранится отдельно в файле ibases.v8i, его удалять не нужно.

Что делает параметр /ClearCache?

При запуске с этим ключом платформа очищает кэш клиент-серверных вызовов, где хранятся метаданные форм и модули. При запуске Конфигуратора дополнительно очищается индекс поиска по модулям. После успешного запуска ключ лучше убрать.

Где находится кэш сервера 1С?

В каталоге кластера: в Windows по умолчанию C:\Program Files\1cv8\srvinfo\reg_1541, в Linux — /home/usr1cv8/.1cv8/1C/1cv8/reg_1541. Кэшем сервера называют каталоги сеансовых данных snccntx с идентификатором в имени.

Можно ли очистить кэш сервера 1С без остановки службы?

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

Есть ли в rac команда очистки кэша?

Отдельной команды очистки кэша нет. С помощью rac удобно подготовить сервер: заблокировать начало сеансов и регламентные задания, получить список сеансов и завершить их. Сами каталоги snccntx удаляют средствами ОС при остановленной службе.

SQL-запросы к базе 1С: таблицы, структура хранения и внешние источники

Базы данных и СУБД

Как устроены таблицы 1С в СУБД, как найти соответствие объектов и таблиц, писать SELECT для чтения и почему не стоит менять данные SQL-ом; плюс чтение внешней SQL-базы из 1С.

Ошибки при запуске 1С и «Непредвиденная ошибка»: как исправить

Базы данных и СУБД

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

База данных 1С: файловая и клиент-серверная, перенос между ними

Базы данных и СУБД

Сравнение файловой и клиент-серверной базы 1С: устройство, ограничения, выбор СУБД, создание новой базы, перенос через выгрузку .dt и резервное копирование.

Сервер 1С:Предприятия и кластер: состав, порты, консоль, rac и веб-сервер

Базы данных и СУБД

Устройство сервера 1С и кластера, порты по умолчанию, консоль администрирования и управление сеансами через rac, кэш сервера, установка на Windows и Linux и публикация базы на веб-сервере.