Разрастание файла журнала транзакций (LDF) — одна из самых распространенных проблем администрирования баз данных Microsoft SQL Server, на которых развернуты платформы 1С:Предприятие. В отличие от файлов данных, которые растут по мере добавления новой информации о документах и справочниках, лог может раздуваться до гигантских размеров даже при отсутствии активного документооборота. Это происходит из-за особенностей модели восстановления и отсутствия своевременного обслуживания.

Когда диск переполняется, работа пользователей с останавливается полностью, так как СУБД блокирует любые операции записи. Администратору приходится срочно принимать меры, чтобы освободить место. Однако простое удаление файла невозможно — это приведет к краху базы. Необходимо понимать разницу между очисткой содержимого лога и физическим уменьшением его размера на диске.

В этой статье мы детально разберем механизмы работы журнала транзакций в связке с , рассмотрим штатные средства SQL Server и специализированные утилиты. Вы узнаете, как безопасно выполнить процедуру shrinking (сжатия) и настроить автоматическое обслуживание, чтобы проблема не повторялась в будущем.

Причины разрастания журнала транзакций в 1С

Файл журнала транзакций записывает абсолютно каждое изменение в базе данных. В высоконагруженных системах , где ежедневно создаются тысячи документов проведения, объем записей колоссален. Если модель восстановления базы установлена в режим FULL (Полный), то лог не очищается автоматически до тех пор, пока не будет создана резервная копия транзакций.

Частой ошибкой является настройка бэкапов только на уровне полной копии базы (FULL BACKUP DATABASE). При такой схеме сегменты лога, помеченные как неактивные, не освобождаются для повторного использования. Со временем файл LDF занимает все свободное место на диске, выделенное под него при создании или автос росте.

⚠️ Внимание: Никогда не пытайтесь удалить файл.ldf вручную через проводник Windows, пока служба SQL Server запущена. Это приведет к переводу базы в режим SUSPECT и полной невозможности её подключения без сложной процедуры восстановления.

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

💡

Используйте системное представление sys.dm_exec_requests для поиска активных запросов с большим объемом записей в логе перед началом очистки.

Диагностика состояния журнала перед очисткой

Прежде чем применять радикальные меры, необходимо оценить текущее состояние файла. В SQL Server есть встроенная команда DBCC SQLPERF(LOGSPACE), которая показывает процент использования пространства лога для каждой базы данных. Это критически важный показатель для принятия решения.

Вы можете выполнить следующий запрос в среде SQL Server Management Studio (SSMS):

DBCC SQLPERF(LOGSPACE);

Результат покажет имя базы, размер файла в МБ и процент использования. Если процент использования близок к 100%, а общий размер файла огромный, значит, внутри много активных записей или не было бэкапа лога. Если же процент использования мал (например, 1-5%), но размер файла гигантский, это означает, что лог был активен в прошлом, но сейчас свободен, и его можно безопасно сжать.

Параметр Описание Нормальное значение Критическое значение
Database Name Имя базы 1С - -
Log Size (MB) Физический размер файла 10-20% от размера MDF Более 50% от размера MDF
Log Space Used (%) Занятое активными транзакциями место < 70% > 90%
Status Статус операции 0 (Успех) Не 0 (Ошибка)

Также полезно проверить модель восстановления базы. Для большинства баз , где не требуется точечное восстановление до секунды (point-in-time recovery), допустимо использование простой модели. Проверить это можно запросом:

SELECT name, recovery_model_desc FROM sys.databases WHERE name = 'ИмяВашейБазы1С';
📊 Какая модель восстановления у вашей основной базы 1С?
FULL (Полная)
SIMPLE (Простая)
BULK_LOGGED (Минимально регистрируемая)
Не знаю / Не проверял

Метод 1: Смена модели восстановления на SIMPLE

Самый быстрый и эффективный способ очистить лог транзакций в без использования стороннего софта — временная смена модели восстановления на SIMPLE. В этом режиме SQL Server автоматически отсекает неактивную часть журнала после каждой контрольной точки (checkpoint), позволяя использовать это место повторно.

Алгоритм действий следующий. Сначала переводим базу в простой режим. Затем принудительно запускаем процесс проверки (checkpoint), чтобы СУБД осознала, что старые записи больше не нужны. После этого физический размер файла можно уменьшить командой сжатия.

USE master;

GO

ALTER DATABASE [ИмяБазы1С] SET RECOVERY SIMPLE WITH NO_WAIT;

GO

DBCC SHRINKFILE (N'ИмяЛогФайла' , 1024); -- Сжимаем до 1 Гб

GO

ALTER DATABASE [ИмяБазы1С] SET RECOVERY FULL WITH NO_WAIT;

GO

Узнать его можно через свойства базы в SSMS или запросом SELECT name FROM sys.database_files WHERE type = 1;.

⚠️ Внимание: После возврата модели в режим FULL цепочка резервных копий транзакций прерывается. Вам необходимо немедленно сделать полный бэкап базы (BACKUP DATABASE), иначе последующие бэкапы лога будут невозможны до следующего полного бэкапа.

Этот метод идеально подходит для экстренного освобождения места. Однако в долгосрочной перспективе частое переключение режимов не рекомендуется, если у вас настроена сложная схема репликации или лог-shipping.

☑️ Алгоритм экстренной очистки

Выполнено: 0 / 5

Метод 2: Использование штатного бэкапа лога (BACKUP LOG)

Если ваша инфраструктура требует сохранения модели восстановления FULL, правильным способом очистки является создание резервной копии журнала транзакций. Команда BACKUP LOG не просто копирует данные, но и помечает виртуальные файлы лога как неактивные, освобождая место внутри файла LDF для перезаписи.

Выполните команду в SQL Server Management Studio:

BACKUP LOG [ИмяБазы1С] TO DISK = N'D:\Backups\Name_log.trn' WITH INIT;

После успешного выполнения бэкапа вы увидите, что процент использования лога (Log Space Used) резко упал. Однако физический размер файла на диске может остаться прежним. Чтобы вернуть место операционной системе, все равно потребуется выполнить команду DBCC SHRINKFILE, но теперь она пройдет мгновенно, так как сжимать будет действительно пустое пространство.

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

Что такое WITH INIT?

Этот параметр указывает SQL Server перезаписать существующий файл бэкапа, если он уже есть. Без него новые данные будут добавлены в конец файла, что быстро заполнит диск копиями лога.

Использование утилиты ClearLog от 1С

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

Утилита работает через командную строку и требует указания ключей подключения. Основные параметры позволяют выбрать режим работы: очистка журнала регистрации или сжатие файла транзакций СУБД. Использование этого инструмента предпочтительнее ручных SQL-запросов, так как он корректно отрабатывает блокировки.

Пример команды для очистки и сжатия:

ClearLog.exe /D "ИмяБазы" /N "Пользователь" /P "Пароль" /ClearLog

Главное преимущество ClearLog — безопасность. Утилита проверяет наличие активных пользователей и может выполнить процедуру в фоновом режиме, минимизируя влияние на работу бухгалтерии или склада. Она также умеет работать с кластером серверов 1С.

⚠️ Внимание: Утилита ClearLog требует остановки работы пользователей с базой или перевода базы в монопольный режим. Запуск во время активной сессии может привести к ошибке выполнения или длительному ожиданию освобождения ресурсов.

Автоматизация обслуживания и плановые задачи

Ручная очистка лога — это путь к проблемам. Профессиональное администрирование подразумевает настройку автоматических задач. В SQL Server для этого используется компонент SQL Server Agent, позволяющий создавать расписания выполнения скриптов.

Рекомендуется создать план обслуживания (Maintenance Plan), который будет включать два шага. Первый шаг — резервное копирование журнала транзакций (если модель FULL). Второй шаг — сжатие файла лога, если его размер превышает определенный порог. Это предотвратит ситуацию, когда диск забивается неожиданно.

  • 📅 Настройте ежедневный бэкап лога каждые 15-30 минут в рабочее время.
  • 📉 Запускайте процедуру сжатия (Shrink) только если свободное место внутри лога превышает 50%.
  • 🔍 Включите мониторинг свободного места на дисках с отправкой алертов администратору.

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

💡

Автоматизация через SQL Agent — единственный способ гарантировать стабильную работу 1С без внезапных остановок из-за переполнения диска.

Частые ошибки и вопросы администраторов

В процессе работы с журналами транзакций новички часто совершают типичные ошибки. Одна из них — попытка сжать файл до минимально возможного размера (1 МБ). Это плохая практика. Файл лога будет вынужден постоянно расти в процессе работы, что вызывает нагрузку на дисковую подсистему из-за постоянной аллокации нового места.

Лучше оставить файлу небольшой запас (например, 2-5 ГБ для средней базы), чтобы он мог расти плавно. Также не стоит игнорировать скорость диска. Размещение файлов MDF и LDF на одном физическом диске (особенно HDD) является узким местом. В идеале их нужно разнести на разные физические накопители или RAID-массивы.

Ниже приведены ответы на самые популярные вопросы, возникающие при очистке логов в инфраструктуре 1С.

Можно ли отключить автос рост файла лога?

Категорически не рекомендуется отключать автос рост (AUTOGROWTH). Если лог заполнится полностью и рост запрещен, база перейдет в режим "только чтение" или станет недоступной. Лучше ограничить максимальный размер файла, но оставить возможность роста до этого лимита.

Почему после очистки лог снова быстро растет?

Это нормальное поведение для активной базы 1С. Лог растет пропорционально количеству изменений. Если рост аномально быстрый (например, за час заполняется 10 ГБ), проверьте наличие циклических обновлений данных, неверно написанных запросов или длинных незакоммиченных транзакций.

Влияет ли очистка лога на скорость работы 1С?

Сама операция записи в лог влияет на скорость. Операция сжатия (SHRINK) создает высокую нагрузку на CPU и диск, поэтому её нужно запускать только в нерабочее время. Обычная очистка через бэкап лога практически не влияет на производительность пользователей.

Нужно ли останавливать службу 1С при очистке?

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

Какой размер лога считается нормальным для базы 100 ГБ?

Универсального стандарта нет, но обычно размер лога составляет от 10% до 25% от размера файла данных (MDF) при активной работе. Если лог занимает 80-90% от размера базы, это сигнал о неправильной настройке модели восстановления или отсутствии бэкапов.

💡

Для мониторинга роста файлов используйте встроенные отчеты SQL Server Management Studio: Клик правой кнопкой по БД -> Отчеты -> Стандартные отчеты -> Сведения о использовании диска.