MSDB사이즈가 19GByte나 되는데, 이거 정리하는 방법 없나요?
MSDB데이터베이스안의 sysmaintplan_logdetail테이블의 사이즈는 9Gbyte정도 되네요.
이 테이블의 Data를 삭제해도 되나요?
또한 9Gbyte의 데이터를 삭제한다 해도 남은 10Gbyte는 어디에서 잡혀있는건지 잘 모르겠네요.
그리고,
Management studio을 실행시켜 MSDB선택후 오른쪽 마우스 클릭해보니 "작업 - 축소"가 있던데요.
이거 눌러서 축소해도 되는지요?
시스템DB라 건들이기가 영 불안해서요...
Comment 2
-
블랙조
2013.07.12 15:57
간단하게 로컬에서 아래 스크립트 테스트해보고 검증이 되면 사용하시길 바랍니다.
왠만하면 참조만...
1. 일단 msdb 백업하세요(중요)
2. 해당 쿼리를 돌려서 어느 데이터베이스 객체에서 많이 사용하고 있는지 확인합니다.
SELECT object_name(i.object_id) as objectName,
i.[name] as indexName,
Sum(a.total_pages) as totalPages,
sum(a.used_pages) as usedPages,
sum(a.data_pages) as dataPages,
(sum(a.total_pages) * 8 ) / 1024 as totalSpaceMB,
(sum ( a.used_pages) * 8 ) / 1024 as usedSpaceMB,
(sum(a.data_pages) * 8 ) / 1024 as dataSpaceMB
FROM sys.indexes i
INNER JOIN sys.partitions p
ON i.object_id = p.object_id
AND i.index_id = p.index_id
INNER JOIN sys.allocation_units a
ON p.partition_id = a.container_id
GROUP BY i.object_id, i.index_id, i.[name]
ORDER BY sum(a.total_pages) DESC, object_name(i.object_id)
GO아님
msdb 의 사용량을 보실려면 msdb -> 오른쪽버튼 -> 보고서 -> 표준 보고서 -> 테이블의 디스크 사용을 해보시면 어디서 용량을
많이 사용하는지 알 수 있을듯 합니다.3. 많이 쓰이는 테이블중에서 메인터넌스 로그/디테일(log/logdetail) 삭제
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];
Truncate table msdb.dbo.sysmaintplan_logdetail;
Truncate table msdb.dbo.sysmaintplan_log;
ALTER TABLE [dbo].[sysmaintplan_log] WITH CHECK ADD CONSTRAINT [FK_sysmaintplan_log_subplan_id] FOREIGN KEY([subplan_id]) REFERENCES [dbo].[sysmaintplan_subplans] ([subplan_id]);
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;4. Shrink 작업
USE MSDB
GO
DBCC SHRINKFILE(MSDBLog, 512)
GODBCC SHRINKFILE(MSDBData, 512)
GO5. 인덱스 리빌드
USE MSDB
GO
EXEC sp_MSforeachtable @command1="print '?' DBCC DBREINDEX ('?', ' ', 80)"
GO6. 통계 업데이트
EXEC sp_updatestats
EXEC sp_helpdb @dbname= 'MSDB'7. SQL Agent 히스토리 로그를 클린업(cleanup) 시키기 위한 메이터넌스 플랜을 만든다. (유지관리계획 추가)
SSMS 에서 SQL Server Agent 오른쪽 버튼 클릭 -> 속성 -> history(기록) 선택 -> 작업 기록 로크 크기 제한 및 에이전트 기록 제거를
적절하게 셋팅해줍니다.
msdb는 SQL Server Agent가 개인(?)적으로 사용하는 db입니다.
Agent가 해야 할 일이라던거 수행한 기록들을 저장하는 용도입니다.
따라서 각 테이블들을 수정하는건 지양해야 할거 같습니다.
sysmaintplan_logdetail은 sysmaintplan_log와 더불어 유지 관리 계획은 결과가 기록된 테이블입니다.
이 테이블이 엄청 커졌다면
ssms에서 유지 관리 계획의 기록보기를 실행 하셔서 거기서 기록들을 지우세요.
그리고 축소를 하면 될거 같습니다.