Как правильно настроить очистку журнала транзакций MS SQL Server для баз 1С?

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

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

Понимание природы журнала транзакций

Первое, что необходимо уяснить — журнал транзакций не является «мусором», который можно просто удалить или очистить командой «сжать». Это критически важный компонент MS SQL Server, обеспечивающий целостность данных. В модели восстановления Full (Полная) SQL Server записывает в журнал все изменения данных и не удаляет их до тех пор, пока не произойдет процедура усечения (truncation).

Многие ошибочно полагают, что установка лимита «Автоувеличение/максимальный размер» в свойствах файла базы данных решит проблему. На самом деле, это лишь ограничит физический размер файла. Как только журнал дойдет до этого предела, база данных выдаст ошибку 9002 (The transaction log is full) и перестанет принимать любые новые транзакции, что приведет к полной остановке работы пользователей.

Шаг 1: Проверка модели восстановления базы данных

Разберем ситуацию, когда журнал транзакций растет необоснованно быстро. Часто это связано с тем, что после обновлений базы или смены настроек сервера модель восстановления базы данных была установлена в Full (Полная). В этой модели SQL Server считает, что администратор обязан делать резервные копии журналов транзакций. Если бэкапы логов не настроены или выполняются некорректно, журнал будет расти бесконечно.

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

  1. Откроем SQL Server Management Studio.
  2. Перейдем в свойства базы данных.
  3. В разделе Options (Параметры) найдем пункт Recovery model (Модель восстановления).

Если там стоит Full, но вы не делаете регулярные бэкапы логов, у нас два пути: перевести базу в модель Simple (Простая) или настроить регулярный бэкап транзакционного лога.

Шаг 2: Выбор стратегии обслуживания

Рассмотрим подробнее каждый из вариантов:

Вариант А: Переход на простую модель (Simple)

Если вам не требуется возможность восстановления базы данных «на точку во времени» (например, восстановиться на 14:15 вчерашнего дня), то простая модель — оптимальный выбор для 1С. В этом режиме SQL Server автоматически очищает журнал после завершения каждой транзакции. Для этого выполните следующую команду:


USE [master];
ALTER DATABASE [ИмяВашейБазы] SET RECOVERY SIMPLE;

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

Вариант Б: Настройка регулярных бэкапов журнала

Если по требованиям безопасности или регламентам вы обязаны использовать модель Full, необходимо настроить Maintenance Plan (План обслуживания) в SQL Server Agent. В него нужно добавить задачу Back Up Transaction Log. Настройте расписание выполнения этого задания (например, каждые 30 или 60 минут). Только после успешного выполнения бэкапа журнала SQL Server получит сигнал, что старые записи можно «усечь» и пространство в файле лога можно использовать повторно. Для автоматизации этого процесса можно применить скрипты для резервного копирования и сжатия баз данных.

Шаг 3: Как физически уменьшить разросшийся файл?

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


USE [ИмяВашейБазы];
DBCC SHRINKFILE (ИмяФайлаЛога, 1024); -- Сжатие до 1 ГБ

Важно помнить: не делайте сжатие (Shrink) до того, как настроили правильный цикл бэкапов. Иначе, как только пользователи начнут работать, файл журнала очень быстро разрастется до прежних размеров, а постоянное сжатие вызывает сильную фрагментацию дискового пространства и замедляет работу сервера.

Проверка регламентных заданий 1С

Проанализируем ситуацию после перехода на новые платформы 1С. Часто регламентные задания по обслуживанию базы данных (реиндексация, обновление статистики) зависят от SQL Server Agent. Если задания по обслуживанию (бэкапы, индексы) перестали выполняться, это приводит к накоплению транзакций. Проверьте SQL Server Agent на наличие ошибок в истории заданий. Возможно, после обновления прав доступа или настроек учетных записей, задания просто перестали запускаться, что косвенно привело к остановке процесса очистки журнала. Для правильной конфигурации всех необходимых процедур можно использовать руководство по настройке регламентных операций в MS SQL Server.

Помните: правильная настройка — это не «лимит размера», а своевременное выполнение резервного копирования логов транзакций.

← На главную