Базы данных
Уменьшение размера базы MSDB в MS SQL2016
Дата публикации
Многие используют регламентные задания (Maintenance plan) в MS SQL без очистки после задания. Результатом является увеличение размера одной из системных баз данных — MSDB. Нужно добиться уменьшение размера базы MSDB. Прежде нужно посмотреть из-за чего база выросла. Первым делом делаем резервную копию базы, с которой будем работать. Создаём запрос:
1USE msdb2GO34SELECT TOP(10)5 o.[object_id]6 , obj = SCHEMA_NAME(o.[schema_id]) + '.' + o.name7 , o.[type]8 , i.total_rows9 , i.total_size10FROM sys.objects o11JOIN (12 SELECT13 i.[object_id]14 , total_size = CAST(SUM(a.total_pages) * 8. / 1024 AS DECIMAL(18,2))15 , total_rows = SUM(CASE WHEN i.index_id IN (0, 1) AND a.[type] = 1 THEN p.[rows] END)16 FROM sys.indexes i17 JOIN sys.partitions p ON i.[object_id] = p.[object_id] AND i.index_id = p.index_id18 JOIN sys.allocation_units a ON p.[partition_id] = a.container_id19 WHERE i.is_disabled = 020 AND i.is_hypothetical = 021 GROUP BY i.[object_id]22) i ON o.[object_id] = i.[object_id]23WHERE o.[type] IN ('V', 'U', 'S')24ORDER BY i.total_size DESC2526Должен получится примерный результат:

Теперь делаем новый запрос:
1ALTER TABLE [dbo].[sysmaintplan_log] DROP CONSTRAINT [FK_sysmaintplan_log_subplan_id];2ALTER TABLE [dbo].[sysmaintplan_logdetail] DROP CONSTRAINT [FK_sysmaintplan_log_detail_task_id];3truncate table msdb.dbo.sysmaintplan_logdetail;4truncate table msdb.dbo.sysmaintplan_log;5ALTER TABLE [dbo].[sysmaintplan_log] WITH CHECK ADD CONSTRAINT [FK_sysmaintplan_log_subplan_id] FOREIGN KEY([subplan_id])6REFERENCES [dbo].[sysmaintplan_subplans] ([subplan_id]);7ALTER TABLE [dbo].[sysmaintplan_logdetail] WITH CHECK ADD CONSTRAINT [FK_sysmaintplan_log_detail_task_id] FOREIGN KEY([task_detail_id])8REFERENCES [dbo].[sysmaintplan_log] ([task_detail_id]) ON DELETE CASCADE;910и теперь можно усечь баз таким запросом:
1DBCC SHRINKFILE (MSDBData, 1000)23Так же для уменьшения размера базы данных в MS SQL через SQL Server Management Studio можно использовать следующие методы:45Использование SQL Server Management Studio: правой кнопкой мыши по названию БД → Задачи (Tasks) → Сжать (Shrink) → База данных (Database) → Нажать на «ОК».67Использование Transact SQL Command: открыть SQL Server Management Studio, подключиться к необходимой базе данных, нажать на «Создать запрос» (New Query), в открывшемся окне прописать соответствующую команду и нажать кнопку «Выполнить» (Execute).89Сжатие на уровне строк: ALTER TABLE tableName REBUILD WITH (DATA_COMPRESSION=ROW).1011Сжатие на уровне страниц: ALTER TABLE tableName REBUILD WITH (DATA_COMPRESSION=PAGE).1213Сжатие таблицы в MS SQL позволяет существенно сэкономить дисковое пространство, а также повысить производительность запросов за счёт уменьшения количества обрабатываемых строк.
Уменьшение размера базы MSDB так же можно включить в отдельное регламентное задание. Мы готовы подобрать под вас сервер и заняться его настройками для максимально эффективной работы.