Куда уходит свободное место на диске при работе 1С в терминальном режиме с PostgreSQL?

Системный администратор 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет IT и автоматизация бизнеса
← На главную

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

Шаг 1. Локализация источника занятого места с помощью сканеров диска

Прежде чем вручную очищать каталоги, выясним точную структуру распределения занятого пространства. Для этого запустим специализированную утилиту-анализатор диска с правами администратора.

  1. Запустим любой проверенный анализатор файловой структуры (например, утилиты TreeSize Free / Professional, WinDirStat, Scanner или SequoiaView).
  2. Выполним сканирование системного диска от имени учетной записи Администратор (это критически важно, чтобы утилита смогла прочитать закрытые системные каталоги и профили всех терминальных пользователей).
  3. Отсортируем папки по убыванию занимаемого объема и зафиксируем ветки каталогов с максимальным весом.

Как правило, виновниками оказываются четыре основные категории: файлы журнала регистрации 1С, журналы и раздувание СУБД PostgreSQL, временные файлы терминальных сессий пользователей и системные отчеты Windows.

Шаг 2. Очистка и настройка журнала регистрации 1С

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

  1. Проанализируем расположение файлов журнала: в каталоге данных кластера серверов srvinfo проверим размер подкаталогов баз. Если журнал переведен в новый формат SQLite, обратим внимание на файл 1Cv8.lgd и сопутствующий файл упреждающей записи 1Cv8.lgd-wal. При высокой нагрузке или блокировках файл wal может не успевать сжиматься.
  2. Выполним сокращение журнала: откроем конфигуратор базы данных, перейдем в меню Администрирование → Настройка журнала регистрации и нажмем кнопку Сократить, указав дату, до которой события можно удалить или сохранить в отдельный архивный файл.
  3. Настроим уровень логирования: если нет строгой необходимости фиксировать каждое чтение или вспомогательные транзакции, оставим регистрацию только ошибок, предупреждений и важных изменений данных.

Шаг 3. Анализ и оптимизация СУБД PostgreSQL

Сервер баз данных PostgreSQL может занимать избыточное пространство по нескольким независимым причинам. Рассмотрим подробнее каждую из них.

  1. Журналы упреждающей записи (WAL): проверим каталог pg_wal (или pg_xlog в старых версиях). Если в конфигурационном файле postgresql.conf включен параметр archive_mode = on, но архивация archive_command падает с ошибкой, файлы WAL не удаляются и непрерывно заполняют диск. Убедимся в корректности команды архивации либо отключим ее, если резервное копирование выполняется иным способом.
  2. Текстовые логи сервера: проверим подкаталог log (или pg_log). Если активированы параметры детальной трассировки, например log_statement = all или задан низкий порог log_min_duration_statement, СУБД способна генерировать гигабайты логов за несколько дней. Настроим параметры ротации log_rotation_age и log_rotation_size.
  3. Раздувание таблиц и индексов (Bloat): если процесс autovacuum не справляется с очисткой «мертвых» строк (dead tuples) из-за зависших пользовательских транзакций, реальный размер таблиц на диске может многократно превышать полезный объем данных. В технологическое окно выполним регламентное обслуживание базы с помощью команды VACUUM FULL или переиндексацию REINDEX.

Шаг 4. Очистка служебных данных кластера 1С и кэша пользователей

При терминальной работе нескольких пользователей на одном сервере накапливаются временные файлы сессий и кэш метаданных.

  1. Временные файлы платформы: в папках AppData\Local\Temp в профиле каждого пользователя, а также в системном каталоге C:\Windows\Temp при аварийных завершениях сеансов скапливаются файлы с маской v8_*.tmp. Удалим устаревшие временные файлы.
  2. Пользовательский кэш: проверим папки AppData\Local\1C\1Cv8 и AppData\Roaming\1C\1Cv8 у каждого пользователя. Очистим каталоги с буквенно-цифровыми GUID-именами.
  3. Технологический журнал и дампы памяти: проверим каталог установки платформы 1С на наличие файла logcfg.xml в папке conf. Если технологический журнал включен, он непрерывно сохраняет события на диск. Также проверим каталоги на наличие файлов аварийных дампов *.dmp, создаваемых процессами rphost или ragent при сбоях.
  4. Индекс полнотекстового поиска: файлы каталога 1Cv8FTxt могут разрастаться при интенсивном изменении данных. Выполним регламентное слияние или очистку индекса полнотекстового поиска через пользовательский интерфейс 1С:УНФ в разделе администрирования.

Шаг 5. Проверка системных механизмов Windows

Если каталоги 1С и PostgreSQL не показывают аномального размера, проверим системные службы операционной системы.

  1. Ошибки архивации CBS-логов: в Windows 7 при сбое обработки журналов компонентов в папке C:\Windows\Logs\CBS процесс Makecab.exe может непрерывно создавать временные архивы cab_* в каталоге C:\Windows\Temp, забивая все свободное пространство. Очистим эту папку и удалим устаревшие объемные логи CBS.
  2. Теневые копии тома (VSS): служба создания точек восстановления способна резервировать значительный процент дискового пространства в каталоге System Volume Information. Скорректируем максимальный объем, выделяемый под защиту системы.

Рекомендации по профилактике

Чтобы избежать повторения проблемы в будущем, реализуем следующие меры:

  1. Если в конфигурации «Управление нашей фирмой» активно используются присоединенные файлы (сканы счетов, договоры, изображения номенклатуры), перенесем их хранение из тела базы данных в тома хранения файлов на отдельном диске через меню Администрирование → Настройки работы с файлами.
  2. Настроим регулярные регламентные скрипты для очистки пользовательских временных папок Temp при завершении терминальных сессий.
  3. По возможности разнесем роли терминального сервера, сервера 1С:Предприятия и СУБД PostgreSQL по разным физическим дискам или виртуальным машинам, чтобы исключить конкуренцию служб за системный раздел.
← На главную