Иногда когда на одном сервере SQL много баз 1с, служебная база msdb может очень сильно разрастаться в объемах. Чаще всего это место занимают бесполезные логи, очистим их.

Поиск проблемного места

  1. Запускаем Microsoft SQL SMS
  2. Выполняем скрипт (1)
  3. Определяем проблемные таблицы
Скрипт (1) поиск больших таблиц

USE msdb GO SELECT TOP(10) o.[object_id] , obj = SCHEMA_NAME(o.[schema_id]) + ‘.’ + o.name , o.[type] , i.total_rows , i.total_size FROM sys.objects o JOIN ( SELECT i.[object_id] , total_size = CAST(SUM(a.total_pages) * 8. / 1024 AS DECIMAL(18,2)) , total_rows = SUM(CASE WHEN i.index_id IN (0, 1) AND a.[type] = 1 THEN p.[rows] END) FROM sys.indexes i JOIN sys.partitions p ON i.[object_id] = p.[object_id] AND i.index_id = p.index_id JOIN sys.allocation_units a ON p.[partition_id] = a.container_id WHERE i.is_disabled = 0 AND i.is_hypothetical = 0 GROUP BY i.[object_id] ) i ON o.[object_id] = i.[object_id] WHERE o.[type] IN (‘V’, ‘U’, ‘S’) ORDER BY i.total_size DESC

Проблемная таблица прям смотрит нам в глаза

Решаем проблему dbo.sysmaintplan_logdetail

  1. Останавливаем службу 1с
  2. Выполняем скрипт (2)
  3. Шринкуем таблицу msdb
  4. Радуемся результату
--Скрипт (2) очистка лога

USE msdb GO ALTER TABLE dbo.sysmaintplan_log DROP CONSTRAINT FK_sysmaintplan_log_subplan_id ALTER TABLE dbo.sysmaintplan_logdetail DROP CONSTRAINT FK_sysmaintplan_log_detail_task_id GO TRUNCATE TABLE msdb.dbo.sysmaintplan_logdetail TRUNCATE TABLE msdb.dbo.sysmaintplan_log GO ALTER TABLE dbo.sysmaintplan_log WITH CHECK ADD CONSTRAINT FK_sysmaintplan_log_subplan_id FOREIGN KEY(subplan_id) REFERENCES dbo.sysmaintplan_subplans (subplan_id) GO ALTER TABLE dbo.sysmaintplan_logdetail WITH CHECK ADD CONSTRAINT FK_sysmaintplan_log_detail_task_id FOREIGN KEY(task_detail_id) REFERENCES dbo.sysmaintplan_log (task_detail_id) ON DELETE CASCADE GO