msdb огромного размера

MSDBData очень большого размера (dbo.sysmaintplan_logdetail)

Иногда когда на одном сервере 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

Опубликовано

в

от

Комментарии

3 комментария на ««MSDBData очень большого размера (dbo.sysmaintplan_logdetail)»»

  1. Аватар пользователя Ирина
    Ирина

    Спасибо за информацию.

  2. Аватар пользователя Zserg
    Zserg

    При выполнении скрипта 2 ошибка:
    There is already an object named ‘FK_sysmaintplan_log_subplan_id’ in the database

    1. Аватар пользователя CrazyElephant_x

      А вы второй запрос одной пачкой выполняете? Ошибка говорит о неудачной попытке пересоздать таблицу после удаления.

Добавить комментарий