Иногда когда на одном сервере SQL много баз 1с, служебная база msdb может очень сильно разрастаться в объемах. Чаще всего это место занимают бесполезные логи, очистим их.
Поиск проблемного места
- Запускаем Microsoft SQL SMS
- Выполняем скрипт (1)
- Определяем проблемные таблицы
-- Скрипт (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с
- Выполняем скрипт (2)
- Шринкуем таблицу msdb
- Радуемся результату
--Скрипт (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
