Лог-файлы Microsoft SQL Server, используемые в 1С:Предприятие, могут разрастаться до десятков гигабайт — особенно в базах с высокой нагрузкой или при некорректных настройках резервного копирования. Это не только занимает место на диске, но и замедляет работу сервера, увеличивает время восстановления после сбоев, а в критических случаях может привести к остановке базы из-за переполнения дискового пространства. В этой статье разберём 7 проверенных способов уменьшить размер логов — от элементарной ручной очистки до тонкой настройки параметров восстановления.

Важно понимать: просто удалить лог-файл (.ldf) нельзя — это нарушит целостность базы данных. Все действия должны выполняться с учётом модели восстановления (Recovery Model), текущих задач резервного копирования и особенностей работы с SQL. Если вы не администратор базы данных, перед внесением изменений согласуйте их с ответственным специалистом или создайте backup!

Мы рассмотрим решения для разных сценариев: от экстренного освобождения места до долговременной оптимизации. Начнём с самых безопасных методов.

1. Ручная очистка лога через SQL Server Management Studio (SSMS)

Самый быстрый способ уменьшить лог — усечь его вручную через стандартные инструменты SQL Server Management Studio (SSMS). Этот метод подходит для баз в модели восстановления FULL или BULK_LOGGED, где логи не очищаются автоматически после резервного копирования.

Пошаговая инструкция:

  • 🔹 Подключитесь к серверу через SSMS (требуются права sysadmin или db_owner).
  • 📁 В дереве объектов найдите базу данных , лог которой нужно уменьшить, и кликните правой кнопкой → Задачи → Усечь файл журнала (Shrink → Files).
  • 📝 В открывшемся окне выберите тип файла Журнал (Log) и укажите желаемый размер (например, 1024 МБ для базы среднего размера).
  • ⚙️ Нажмите OK и дождитесь завершения операции. В крупных базах это может занять несколько минут.

⚠️ Внимание: Усечение лога не заменяет резервное копирование! Если после этой операции не создать backup журнала транзакций, цепочка резервных копий будет нарушена, и вы не сможете восстановить базу до момента усечения.

💡

Если в SSMS опция "Усечь файл журнала" неактивна, проверьте модель восстановления базы. Для ручной очистки она должна быть FULL или BULK_LOGGED.

2. Автоматическая очистка через резервное копирование журнала транзакций

Если лог разрастается регулярно, проблема кроется в отсутствии резервного копирования журнала транзакций. В модели FULL SQL Server не очищает лог автоматически — он ждёт, пока вы не создадите backup журнала. Без этого лог будет расти бесконтрольно.

Решение:

  1. Настройте регулярное резервное копирование журнала транзакций (например, каждые 15–60 минут в зависимости от нагрузки).
  2. Используйте скрипт для автоматической очистки лога после бэкапа:
    BACKUP LOG [ИмяБазы1С] TO DISK = 'D:\Backups\1C_Log.trn' WITH COMPRESSION;
    

    DBCC SHRINKFILE (N'ИмяБазы1С_Log', 1024); -- Уменьшает лог до 1 ГБ

  3. Автоматизируйте процесс через SQL Server Agent или Планировщик задач Windows.

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

Проверьте модель восстановления базы|Создайте резервную копию журнала транзакций|Усеките лог до минимального размера|Настройте расписание для автоматического бэкапа-->

3. Изменение модели восстановления базы данных

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

Как изменить модель:

  • 🔄 В SSMS кликните правой кнопкой по базе → Свойства → Параметры.
  • 📋 В разделе Модель восстановления (Recovery model) выберите Простая (Simple).
  • 💾 Сразу после изменения создайте полную резервную копию базы (FULL backup), так как цепочка логов будет сброшена.

⚠️ Внимание: Модель SIMPLE не позволяет восстановить базу на конкретный момент времени (например, до ошибки пользователя). Используйте её только там, где это допустимо!

FULL|BULK_LOGGED|SIMPLE|Не знаю-->

4. Оптимизация ротации логов через настройки 1С

Иногда причиной разрастания логов становятся некорректные настройки обмена данными в , длительные транзакции или фоновые задачи. Чтобы уменьшить нагрузку на лог, проверьте:

  • 🔄 Регламентные задания: отключите или оптимизируйте задачи, которые выполняются слишком часто (например, ежеминутное обновление курсов валют).
  • 📤 Обмены данными: разбейте крупные пакеты обмена на меньшие порции (например, по 1000 документов за раз).
  • 🛠️ Длинные операции: используйте ПоддержкаLargeObject = Ложь в коде для работы с большими объектами (например, при загрузке файлов в справочники).

Критическая настройка для крупных баз: если в используется репликация или распределённые информационные базы, настройте отдельные jobs для очистки логов на каждом узле. В противном случае лог на основном сервере будет расти пропорционально количеству реплик.

5. Архивирование и сжатие логов

Если лог нельзя усечь (например, из-за требований аудита), его можно архивировать и сжимать для экономии места. Для этого:

  1. Настройте сжатие резервных копий в настройках SQL Server:
    EXEC sp_configure 'backup compression default', 1;
    

    RECONFIGURE;

    Это уменьшит размер файлов .trn на 50–80%.

  2. Используйте внешние инструменты (например, 7-Zip или WinRAR) для архивации старых логов с параметром максимального сжатия.
  3. Храните архивы на отдельном диске или в облачном хранилище (например, Yandex Disk или S3).

⚠️ Внимание: Сжатие резервных копий увеличивает нагрузку на CPU во время бэкапа. На слабых серверах это может привести к замедлению работы .

Как проверить текущий уровень сжатия бэкапов?

Запустите запрос:

SELECT name, backup_compression_default

FROM sys.databases

WHERE name = 'ИмяБазы1С';

Если значение backup_compression_default = 1, сжатие включено.

6. Перенос логов на отдельный диск

Если уменьшить лог не получается, а место на системном диске заканчивается, рассмотрите перенос файла журнала на другой физический диск. Это не уменьшит его размер, но решит проблему нехватки пространства.

Инструкция:

  • 📁 В SSMS кликните правой кнопкой по базе → Задачи → Отсоединить (Detach).
  • 🔄 Переместите файл .ldf в новую папку (например, E:\SQL_Logs\).
  • 🖥️ Подключите базу обратно, указав новые пути к файлам:
    CREATE DATABASE [ИмяБазы1С] ON
    

    (FILENAME = 'C:\Data\ИмяБазы1С.mdf'),

    (FILENAME = 'E:\SQL_Logs\ИмяБазы1С_log.ldf')

    FOR ATTACH;

⚠️ Внимание: При переносе лога на другой диск убедитесь, что:

  • 🔹 Новый диск имеет достаточную производительность (желательно SSD или RAID-массив).
  • 🔹 На диске достаточно места для роста лога (рекомендуется свободное пространство ≥ 2× от текущего размера лога).

7. Мониторинг и профилактика разрастания логов

Чтобы предотвратить повторное разрастание логов, настройте мониторинг их размера и автоматические оповещения. Для этого:

Инструмент Что мониторить Пороговое значение
SQL Server Agent Размер файла .ldf > 80% от выделенного пространства
Zabbix/Nagios Свободное место на диске с логами < 15% свободного места
Скрипт PowerShell Время последнего бэкапа лога > 24 часа без бэкапа

Пример скрипта для оповещения о разрастании лога:

$logSize = (Get-ChildItem "D:\SQL_Data\ИмяБазы1С_log.ldf").Length / 1GB

if ($logSize -gt 10) { # Если лог больше 10 ГБ

Send-MailMessage -To "admin@company.ru" -Subject "Предупреждение: лог 1С разросся до $logSize ГБ" -Body "Требуется очистка!"

}

💡

Регулярный мониторинг логов позволяет предотвратить их разрастание до критических размеров и избежать аварийных ситуаций.

FAQ: Частые вопросы по уменьшению логов SQL в 1С

Можно ли просто удалить файл .ldf?

Нет! Удаление файла журнала без отсоединения базы приведёт к её повреждению. Используйте только DBCC SHRINKFILE или изменение модели восстановления.

Почему лог снова растёт после усечения?

Скорее всего, в базе есть открытые транзакции или не настроено резервное копирование журнала. Проверьте активные транзакции запросом:

SELECT * FROM sys.dm_tran_active_transactions;

Как уменьшить лог в базе 1С на PostgreSQL?

Для PostgreSQL используйте команду VACUUM FULL или настройте archive_command в postgresql.conf. Подробности зависят от версии СУБД.

Сколько места должен занимать лог в нормальном состоянии?

Для базы размером до 50 ГБ нормальный размер лога — 1–5 ГБ. Если лог превышает 10% от размера базы данных (.mdf), требуется оптимизация.

Можно ли отключить ведение лога совсем?

Нет, журнал транзакций критичен для целостности данных. Максимум — перевести базу в модель SIMPLE, но это отключит точечное восстановление.