Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

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

MS SQL Server: Настройка задачи Очистка журнала и размер msdb

Обновлено: 15.09.2026  ·  Официальная база знаний

Симптомы неконтролируемого роста базы msdb

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

Таблица в msdbХранимые данныеПричина разрастания
dbo.backupsetСведения о каждом выполненном бэкапеОтсутствие регламентной очистки истории резервного копирования
dbo.backupfileСведения о файлах данных внутри каждого бэкапаЕжечасные бэкапы транзакционных логов сотен баз 1С
dbo.sysjobhistoryЛоги выполнения шагов агента SQL ServerНе настроен лимит строк журнала заданий (Job History limit)

Регламент обслуживания и очистки базы данных msdb

  1. Удаление старой истории бэкапов через системную хранимую процедуру: удалите исторические записи старше 30 или 60 дней:
    USE msdb;
    GO
    DECLARE @OldestDate DATETIME = DATEADD(dd, -60, GETDATE());
    EXEC sp_delete_backuphistory @oldest_date = @OldestDate;
    GO
  2. Очистка истории заданий SQL Agent и цепочек обслуживания:
    USE msdb;
    GO
    DECLARE @CleanupDate DATETIME = DATEADD(dd, -30, GETDATE());
    EXEC sp_purge_jobhistory @oldest_date = @CleanupDate;
    EXEC sp_maintplan_delete_log @oldest_time = @CleanupDate;
    GO
  3. Ограничение глубины хранения логов в свойствах SQL Agent: откройте SQL Server Agent > Свойства > Журнал (History):
    • Установите флаг Ограничить размер журнала журнала заданий.
    • Максимальный размер журнала в строках: 10000.
    • Максимум строк журнала на одно задание: 1000.
  4. Сжатие файла данных msdb после массовой чистки (Shrink):
    USE msdb;
    GO
    CHECKPOINT;
    DBCC SHRINKFILE (MSDBData, 1024); -- Сжатие до 1 ГБ
    GO

Важно: Процедура sp_delete_backuphistory на запущенных базах с миллионами записей может выполняться много часов и блокировать таблицы. При первичном запуске удаляйте историю итеративно (по 3-5 дней за шаг).

Практический опыт инженера: Практика ITSTM: Если msdb раздулась свыше 100 ГБ, стандартный sp_delete_backuphistory приведет к эскалации блокировок всей базы. Используйте скрипт с порционным удалением: делайте TOP (10000) в цикле WHILE с паузой WAITFOR DELAY '00:00:01'.

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

Повредит ли очистка backuphistory возможность восстановления текущих бэкапов?

Нет. Физические файлы резервных копий .bak и .trn не затрагиваются, удаляются только метаданные об операциях из системного журнала MS SQL Server.

Почему регулярный Maintenance Plan 'History Cleanup' зависает?

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

Как предотвратить постоянный рост msdb в будущем?

Создайте еженедельное задание SQL Agent с вызовом sp_delete_backuphistory с параметром DATEADD(day, -30, GETDATE()).

Нужно ли перестраивать индексы в msdb после чистки?

Да, после удаления миллионов записей индексы системных таблиц сильно фрагментированы, рекомендуется выполнить команду: ALTER INDEX ALL ON dbo.backupset REBUILD.