При администрировании баз данных 1С на сервере MS SQL Server системные администраторы часто сталкиваются с ситуацией, когда файл журнала транзакций (.ldf) или файл резервной копии (.bak) начинает бесконтрольно расти. Особенно ярко это проявляется после обновления конфигурации платформы 1С или выполнения регламентных процедур. Разберем детально, почему это происходит, как уменьшить размер журнала транзакций без риска для данных и как настроить регулярное обслуживание базы данных.
Проанализируем механику работы платформы 1С при обновлении конфигурации. Обновление прикладного решения практически всегда сопровождается реструктуризацией таблиц. В ходе реструктуризации платформа выполняет следующий алгоритм:
Если для базы данных в MS SQL Server установлена полная модель восстановления (FULL), каждая из перечисленных операций в полном объеме протоколируется в журнал транзакций. В результате даже небольшое обновление может увеличить файл .ldf на несколько гигабайтов. Аналогичный эффект вызывают операции перестроения индексов (Rebuild Index), которые также генерируют объем записей в журнале, сопоставимый с объемом самих таблиц.
Выясним причину, по которой файл бэкапа может постоянно расти в размерах при регулярном создании копий. В графическом интерфейсе SQL Server Management Studio (SSMS) при настройке резервного копирования доступен выбор режима записи в файл:
.bak. В результате размер файла бэкапа непрерывно суммируется с каждым запуском задачи.Чтобы избежать бесконечного роста файла бэкапа, необходимо либо включать флаг перезаписи (WITH INIT), либо настраивать динамическое формирование имени файла с текущей датой и временем (например, через планы обслуживания Maintenance Plans или скрипты SQL Server Agent).
Рассмотрим процесс уменьшения физического размера файла .ldf. Важно понимать: процедура сжатия файла журнала транзакций не затрагивает пользовательские данные. Все учетные данные, документы, справочники и регистры 1С хранятся в основном файле базы (.mdf или .ndf), тогда как .ldf содержит лишь служебную историю изменений.
Разберем по шагам, как выполнить сжатие через SQL Server Management Studio (SSMS):
Базы данных.Журнал (Log).Освободить неиспользуемое место (Release unused space) или указываем желаемый целевой размер.Иногда после выполнения операции Shrink размер файла .ldf не уменьшается. Проанализируем основные причины такого поведения:
FULL виртуальные файлы журнала (VLF) не могут быть усечены до тех пор, пока не будет выполнен бэкап журнала транзакций (BACKUP LOG). Без бэкапа лога все записи считаются активными.COMMIT) или не отменена (ROLLBACK), место перед ней не освободится.Чтобы выяснить точную причину блокировки очистки лога, выполним запрос к системному представлению:
SELECT name, recovery_model_desc, log_reuse_wait_desc
FROM sys.databases
WHERE name = 'ИмяБазы1С';
Если в поле log_reuse_wait_desc указано LOG_BACKUP, необходимо выполнить резервное копирование журнала транзакций. Если указано ACTIVE_TRANSACTION — следует найти и завершить долгую транзакцию в 1С или на стороне SQL Server.
Рассмотрим правила корректной настройки базы данных для стабильной производительности 1С:
SIMPLE). В этом режиме журнал транзакций автоматически усекается после каждой контрольной точки (CHECKPOINT) и не требует постоянного сжатия..ldf в компактном состоянии.SIMPLE, применить обновление, затем вернуть модель FULL и сразу сделать полную резервную копию.512 МБ или 1024 МБ), чтобы избежать сильной фрагментации виртуальных файлов журнала (VLF).AUTO_SHRINK) на уровне базы данных. Постоянные циклы расширения и сжатия файлов вызывают критическую фрагментацию диска и резкое падение скорости работы 1С. Сжатие файлов следует выполнять только вручную и по мере разовой необходимости.