Чистим кэш сервера 1С Предприятия: от консоли кластера до СУБД
Содержание
Кэш серверной 1С чистят в таком порядке: сначала завершают зависшие сеансы и перезапускают рабочие процессы кластера, затем останавливают службу сервера и удаляют служебные каталоги snccntx* в папке кластера. Кэш СУБД (MS SQL Server или PostgreSQL) чистят отдельно, и делают это реже всего. Без остановки службы удалять что-либо в каталоге кластера нельзя.
Чистить кэш серверной 1С стоит, когда база стала тормозить без видимой причины, в списке сеансов висят «мёртвые» пользователи, а рабочие процессы разрослись до десятков гигабайт. Ниже — способы от безобидных к радикальным. Начинайте с первого и останавливайтесь, как только стало лучше.
Сначала выясните, что именно тормозит
Очистка кэша помогает не всегда. Иногда виноваты блокировки, медленный диск или тяжёлый отчёт. Потратьте десять минут на диагностику, иначе вы остановите рабочий сервер зря.
Что смотреть в первую очередь
- 🧠 Память рабочих процессов. В консоли кластера откройте рабочие процессы и сравните объём памяти. Один процесс на 15-20 ГБ при остальных на 2-3 ГБ — типичный признак утечки.
- 👥 Сеансы. Ищите сеансы, у которых давно нет активности, но они числятся в списке. Часто это обрывы связи по RDP или Wi-Fi.
- 🔒 Блокировки. Если много сеансов ждут одного, причина в блокировках, а не в кэше.
- 💾 Диск. Загрузка диска под данные СУБД и под каталог кластера выше 80-90% по очереди — кэш тут ни при чём.
- 📈 Размер tempdb (для MS SQL). Раздутый файл говорит о тяжёлых запросах с временными таблицами.
Быстрый тест на «кэшевую» природу проблемы
Зайдите в ту же базу с другого компьютера под тем же пользователем. Если у вас тормозит, а у коллеги нет, виноват клиентский кэш: его чистят отдельно, ключом запуска /ClearCache или удалением папки профиля. Серверный кэш тут трогать не нужно.
Если тормозит у всех и сразу, начинайте с серверных сеансов. Если только в одном отчёте, ищите проблему в запросе.
Штатная чистка: сеансы и рабочие процессы кластера
Это самый безопасный способ. Он не требует остановки службы, только короткого предупреждения пользователей.
Завершение зависших сеансов
- Откройте консоль администрирования серверов 1С Предприятия.
- Раскройте сервер, кластер, затем раздел с сеансами. Выберите нужную информационную базу.
- Отсортируйте список по времени последней активности.
- Отметьте сеансы с давней активностью и завершите их через контекстное меню.
Если нужно завершить сразу много сеансов, удобнее утилита rac. Сначала узнайте идентификатор кластера:
rac cluster list
Затем получите список сеансов и завершите нужный:
rac session list --cluster=<id_кластера>
rac session terminate --cluster=<id_кластера> --session=<id_сеанса>
Идентификаторы в угловых скобках — это GUID из выводов предыдущих команд. Если на сервере кластер защищён паролем администратора, добавьте параметры --cluster-user и --cluster-pwd.
Перезапуск рабочих процессов
Освободить память рабочих процессов можно, не останавливая службу целиком. В свойствах кластера есть три параметра:
| Параметр | Что делает | Ориентир |
|---|---|---|
| Интервал перезапуска рабочих процессов | Через сколько секунд процесс перезапускается сам; 0 — отключено | 86400 (раз в сутки) |
| Допустимый объём памяти рабочих процессов | Порог в байтах, после которого процесс считается «жирным» | 70-80% от доступной RAM на процесс |
| Интервал превышения допустимого объёма | Сколько секунд процесс может держать превышение | 60-300 |
Перезапуск происходит мягко: активные сеансы доработают, новые подключатся к свежему процессу. Именно поэтому настройка по расписанию часто решает проблему утечек без всякой ручной чистки.
Установите перезапуск на ночное время или на окно без работы пользователей. Сеанс, подключённый к перезапускаемому процессу, может оборваться, если он слишком долго висит в вызове.
Чистка каталога кластера (кэш сеансовых данных)
Если мягкие меры не помогли, переходите к каталогу кластера. Он лежит там, где вы указали при установке сервера, обычно это папка srvinfo. Внутри для каждого кластера есть подпапка вида reg_1541 (номер порта менеджера кластера).
Что там можно удалять
- Папки
snccntx<GUID>— данные сеансов, их пересоздаёт сервер при следующем подключении. - Старые временные файлы в каталогах информационных баз — только после остановки службы.
Чего удалять нельзя
- Файлы
1CV8Clst.lstи1CV8Reg.lst— это реестр кластера и баз. Потеряете их, придётся заново регистрировать кластер и все базы. - Любые папки и файлы, назначение которых вы не знаете.
Порядок действий
- Предупредите пользователей и дождитесь окончания работы.
- Остановите службу «Агент сервера 1С:Предприятия 8.3» (в Windows через оснастку «Службы» или командой
net stop). В Linux —systemctl stopдля службы сервера. - Убедитесь, что процессы
ragent,rmngrиrphostисчезли из диспетчера задач или из выводаps. - Сделайте копию каталога кластера. Для очень больших каталогов достаточно скопировать файлы
.lst. - Удалите папки
snccntx*. - Запустите службу и проверьте, что кластер и базы на месте.
Не удаляйте ничего в каталоге, пока хотя бы один процесс rphost жив. Это приведёт к повреждению сеансовых данных и «странным» ошибкам при входе.
Временные данные в Microsoft SQL Server
На MS SQL кэшем в обиходе называют несколько разных вещей. Разберём по очереди.
tempdb
Системная база tempdb хранит временные таблицы, которые 1С создаёт при выполнении запросов. Перезапускать её специально нет необходимости: она пересоздаётся при старте службы SQL Server. Но если файл разросся и диск забит, помогает только перезапуск службы СУБД (в окно без пользователей).
Чтобы избежать повторения:
- 📁 вынесите
tempdbна отдельный быстрый диск; - 🧩 создайте несколько файлов данных одинакового размера (обычно по числу ядер, но не больше 8);
- 🔧 задайте фиксированный начальный размер, чтобы файл не рос рывками.
Кэш планов запросов и буферный кэш
Иногда после смены настроек или обновления нужно сбросить планы запросов:
DBCC FREEPROCCACHE;
Сброс буферного кэша данных делают только на тестовом сервере:
DBCC DROPCLEANBUFFERS;
На боевом сервере после этих команд нагрузка на диск вырастет: сервер заново читает данные с диска и перестраивает планы. Делайте это вне рабочих часов и только если понимаете, зачем.
Статистика и индексы
Часто «кэш» на деле — это устаревшая статистика. Обновите её командой sp_updatestats для нужной базы или настройте задание обслуживания: реиндексация раз в неделю, обновление статистики раз в сутки. Это даёт больше, чем сброс буферов.
PostgreSQL и другие СУБД
В PostgreSQL нет прямой команды сброса кэша, и это нормально. Серверу помогает «горячий» кэш, поэтому очистка здесь обычно вредна.
Что делать вместо сброса
- ✅ Выполните
VACUUM ANALYZEпо базе: освобождает место от мёртвых строк и обновляет статистику. - ✅ Проверьте долгие транзакции через представление
pg_stat_activityи завершите зависшие. - ✅ Проверьте параметры
shared_buffers,work_memиtemp_buffers: для сервера 1С их задают осознанно, а не оставляют по умолчанию.
SELECT pid, state, now() - xact_start AS длительность, query
FROM pg_stat_activity
WHERE state <> 'idle'
ORDER BY xact_start;
Если в выводе висят транзакции на часы, их причина — зависший сеанс 1С. Завершите его в консоли кластера, и транзакция закроется сама.
Кэш операционной системы
В Linux можно сбросить страничный кэш ОС:
sync; echo 3 > /proc/sys/vm/drop_caches
Это почти всегда бессмысленно: система сама отдаёт память по мере надобности. Использовать стоит только для замеров производительности на тестовом стенде.
Другие СУБД
Для файловой схемы и для менее распространённых СУБД действует общий принцип: сначала статистика и обслуживание индексов, и лишь потом сброс кэшей. Подробности зависят от версии, смотрите документацию вашей СУБД.
Кэш метаданных и скомпилированных модулей
Платформа хранит копии конфигурации и скомпилированные модули в кэше, чтобы быстро открывать формы и вызывать процедуры. Признаки того, что кэш «поплыл»: после обновления конфигурации видна старая форма, пропали новые реквизиты, вылезают ошибки вида «Неизвестный тип» или «Не найден объект».
Клиентская часть
Папки кэша лежат в профиле пользователя:
%APPDATA%\1C\1cv8— настройки и часть данных;%LOCALAPPDATA%\1C\1cv8— локальный кэш информационных баз.
Внутри — папки с именами-GUID. Удалять можно целиком: платформа создаст их заново. Закройте все окна 1С перед удалением.
Альтернатива — запуск клиента с параметром:
1cv8.exe ENTERPRISE /S "сервер\база" /ClearCache
Серверная часть
Кэш метаданных на сервере обновляется при перезапуске рабочих процессов и при изменении конфигурации. Принудительно «освежить» его можно перезапуском службы сервера или чисткой каталога кластера из раздела выше. Отдельных настроек для него не нужно.
Если ошибка воспроизводится у одного пользователя, ищите проблему в его профиле, а не на сервере.
После обновления конфигурации базы полезно сразу перезапустить рабочие процессы. Это снимает половину жалоб «после обновления всё странно».
Автоматизация обслуживания
Ручная чистка работает, пока о ней помнят. Заведите регулярные задачи.
Что автоматизировать
| Задача | Как | Периодичность |
|---|---|---|
| Перезапуск рабочих процессов | Параметры кластера | Раз в сутки, ночью |
| Завершение зависших сеансов | Скрипт с rac по планировщику | Раз в день |
| Обновление статистики СУБД | Задание обслуживания | Раз в сутки |
| Реиндексация | Задание обслуживания | Раз в неделю |
| Чистка кэша сеансовых данных | Скрипт: остановка, удаление, запуск | Раз в месяц, только при необходимости |
Пример скрипта для Windows
Сохраните как .bat и поставьте в планировщик на ночь:
net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
timeout /t 20
for /d %%i in ("D:\srvinfo\reg_1541\snccntx*") do rd /s /q "%%i"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"
Название службы и путь у вас могут отличаться. Откройте оснастку «Службы», скопируйте точное имя и проверьте путь к каталогу кластера. Перед первым запуском выполните скрипт вручную на тестовом сервере.
Автоматическая остановка службы обрывает работу всех пользователей. Ставьте её на время, когда в базе точно никого нет, и убедитесь, что регламентные задания и обмены в это время не идут.
Профилактика: как не доводить до чистки
Регулярная чистка лечит последствия. Причины проще убрать заранее.
- 🔌 Отключайте пользователей корректно. Закрытие окна RDP без выхода из 1С оставляет сеанс висеть. Включите в групповой политике автоматическое завершение отключённых сеансов.
- 🧮 Смотрите на «тяжёлые» запросы. Технологический журнал и замеры производительности показывают, какой отчёт грузит сервер.
- 🧯 Держите свободное место. Диски под данные, tempdb и каталог кластера не должны заполняться выше 80%.
- 🔄 Обновляйте платформу. Часть утечек памяти в рабочих процессах закрывается в новых релизах платформы.
- 📏 Рассчитайте память. На сервер с 64 ГБ RAM не стоит ставить десятки рабочих процессов без лимитов: задайте допустимый объём памяти на процесс.
Типичные ошибки при чистке
- ❌ Удаляют каталог кластера целиком вместе с
.lst-файлами. Кластер и базы приходится регистрировать заново. - ❌ Чистят каталог при работающей службе. Часть файлов занята, часть остаётся повреждённой.
- ❌ Сбрасывают кэши СУБД в разгар рабочего дня и получают провал производительности на 20-30 минут.
- ❌ Чистят серверный кэш там, где проблема в клиентском профиле конкретного пользователя.
- ❌ Меняют сразу всё: перезапуск, чистка, обновление статистики. Потом непонятно, что помогло.
Меняйте по одному параметру и замеряйте результат: время открытия формы, время проведения типового документа, объём памяти рабочего процесса.
Частые вопросы
Как часто нужно чистить кэш сервера 1С?
Можно ли чистить кэш, пока пользователи работают?
Пропадут ли данные или настройки после чистки?
Нужно ли перезагружать сервер целиком?
Чем чистка серверного кэша отличается от клиентского?
Что делать, если после чистки не запускается кластер?
.lst из копии и запустите службу. Если копии нет, зарегистрируйте кластер и базы заново.