Разберем ситуацию, с которой часто сталкиваются администраторы и разработчики: после настройки электронной почты размер информационной базы 1С (например, файла выгрузки .dt) стремительно увеличивается. На практике база может вырасти с 1.9 Гб до 10 Гб всего за сутки, а на сервере СУБД PostgreSQL образуются огромные файлы данных. Проанализируем причину этой проблемы и посмотрим, как правильно настроить систему, чтобы избежать неконтролируемого роста данных.
Посмотрим на механизм работы встроенного почтового клиента 1С. При первоначальной настройке учетной записи система по умолчанию пытается синхронизировать все письма с почтового сервера. Все входящие сообщения, включая спам и тяжелые вложения (документы, сканы, архивы), загружаются в базу. В 1С создаются документы ЭлектронноеПисьмо и элементы справочника ВложенияЭлектронныхПисем. Выясним причину глубже: хранение двоичных данных непосредственно в таблицах базы данных SQL всегда приводит к быстрому расходованию дискового пространства и замедлению резервного копирования.
Разберем по шагам первое и самое простое решение. Если электронная почта в программе используется исключительно для рассылки клиентам печатных форм (счетов, накладных, актов), нам вообще не нужно скачивать входящие письма. Выполним следующие действия:
Таким образом, мы запретим 1С обращаться к входящим сообщениям, и система перестанет скачивать спам и ненужную переписку.
Рассмотрим подробнее ситуацию, когда получать входящую почту в 1С все-таки нужно. Как избежать загрузки мусора?
Посмотрим на пример оптимального хранения файлов. Чтобы вложения не оседали в СУБД, настроим их хранение вне базы. Перейдем в раздел администрирования (обычно "Настройки работы с файлами"). Включим опцию Хранить файлы в томах на диске. Создадим отдельную папку на сервере и укажем к ней путь. Теперь 1С будет хранить в базе только текстовые атрибуты писем и ссылки на файлы, а сами вложения (PDF-файлы, картинки) будут лежать в обычной папке операционной системы. Это кардинально решит проблему разрастания таблиц PostgreSQL.
Проанализируем ситуацию с уже загруженным мусором. Галочка "Удалять письма через день" в настройках почты относится только к удалению писем на самом почтовом сервере (например, Яндекс или Mail.ru), но не очищает саму базу 1С.
Чтобы очистить 1С, выполним следующие шаги:
ЭлектронноеПисьмо.ВложенияЭлектронныхПисем.Удаляя письма, мы можем нарушить только ссылочную целостность (если письмо привязано к задаче или контрагенту), но на общую статистику и работоспособность базы это не повлияет.
Наконец, разберем важнейший технический нюанс работы с СУБД PostgreSQL. Даже после успешного удаления тысяч писем через "Удаление помеченных объектов", физический размер файлов базы на жестком диске (те самые файлы по гигабайту) не уменьшится автоматически.
PostgreSQL использует механизм MVCC, при котором удаленные данные просто помечаются как "мертвые", но место операционной системе не отдается. Чтобы реально сжать базу, выполним обслуживание таблиц на сервере БД. Нам потребуется запустить команду:
VACUUM FULL;
Эта команда полностью перестроит таблицы и вернет свободное дисковое пространство. Обратите внимание: операция полностью блокирует таблицы на время выполнения, поэтому ее следует проводить исключительно в нерабочее время (ночью или в выходные).