Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

MSSQL_SHRINK_LDF 1С:Предприятие и СУБД

Устранение разрастания LDF и фрагментации VLF: правильный DBCC SHRINKFILE

Обновлено: 26.08.2026 · Официальная документация ↗

Разрастание файла журнала и фрагментация VLF вызывают серьезные проблемы производительности:

  • Файл .ldf занял 100% емкости тома, парализуя работу СУБД;
  • Медленный старт базы данных (Recovery Phase) при перезагрузке сервера из-за наличия десятков тысяч мелких VLF;
  • Задержки при вставке и модификации данных в 1С (Log Write Waits / WRITELOG wait types).

1. Проверка количества и размера виртуальных лог-файлов (VLF)

Выполните анализ фрагментации структуры журнала:

-- Для SQL Server 2016 SP2 и новее:
SELECT 
    file_id,
    COUNT(vlf_sequence_number) AS Total_VLF_Count,
    SUM(vlf_size_mb) AS Total_Size_MB
FROM sys.dm_db_log_info(DB_ID('ERP_1C'))
GROUP BY file_id;

Если Total_VLF_Count превышает 500-1000 — журнал транзакций сильно фрагментирован и требует пересоздания.

2. Корректная процедура сжатия файла журнала (Shrink)

Шаг 1: Убедитесь, что активная часть лога сброшена бэкапом:

USE [ERP_1C];
GO
BACKUP LOG [ERP_1C] TO DISK = N'E:\Backup\Log\flush.trn' WITH COMPRESSION;
GO

Шаг 2: Определение логического имени файла LDF:

SELECT name, physical_name FROM sys.database_files WHERE type_desc = 'LOG';

Шаг 3: Выполнение сжатия до минимального целевого размера (например, 1024 МБ):

USE [ERP_1C];
GO
DBCC SHRINKFILE (N'ERP_1C_Log', 1024);
GO

3. Предотвращение фрагментации VLF (Правильный Autogrowth)

После сжатия задайте достаточный фиксированный размер файла LDF и правильный шаг авторасширения (от 512MB до 2048MB, но не в процентах!):

ALTER DATABASE [ERP_1C] 
MODIFY FILE ( NAME = N'ERP_1C_Log', SIZE = 8192MB , FILEGROWTH = 1024MB );
GO
💡 Практика специалистов: Никогда не включайте опцию AUTO_SHRINK в свойствах базы данных. Постоянный цикл 'авторасширение -> автосжатие' убивает производительность дисков и фрагментирует как файлы данных, так и файловую систему NTFS.

Частые вопросы (FAQ)

Почему нельзя использовать авторасширение (Autogrowth) в процентах (например, 10%)?

Процентное расширение на больших базах порождает непредсказуемые скачки выделения места, а на малых — тысячи микро-VLF файлов размером по несколько килобайт. Это вызывает деградацию операций записи журнала (wait type WRITELOG).

Почему DBCC SHRINKFILE не уменьшает файл LDF даже после выполнения бэкапа?

Активный виртуальный лог-файл (Active VLF) может находиться в самом конце физического файла .ldf. Сделайте еще один бэкап лога или сгенерируйте фиктивную транзакцию (например, создайте и удалите временную таблицу), чтобы указатель активного VLF перешел в начало файла, затем повторите Shrink.

Можно ли сжимать файлы данных (MDF) с помощью DBCC SHRINKDATABASE?

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

Какое оптимальное количество VLF должно быть у рабочей базы 1С?

Оптимальное количество VLF для стабильной производительности составляет от 50 до 300 файлов при общем размере журнала 8-32 ГБ.

Полезные материалы
Рекомендуем