Иногда когда на одном сервере 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
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.