이 문제에 대한 해결책은 데이터베이스의 모든 테이블에 대해 sp_spaceused 를 실행 하고이 데이터를 테이블에 저장 하는 작업을 매주 실행하는 것 입니다. 각 테이블의 크기가 ..let..10 %보다 크면 dbcc 정리 테이블을 실행합니다.
테이블 크기를 반복하는 코드는 다음과 같습니다.
if OBJECT_ID ('tempdb.dbo.#temp') is not null
drop table #temp;
if OBJECT_ID ('dbo.BigTables') is not null
drop table dbo.BigTables;
go
CREATE TABLE [dbo].[BigTables] (
[table_name] [sysname] NOT NULL,
[row_count] [int] NULL,
[col_count] [int] NULL,
[data_size] [varchar](50) NULL,
[Date] [datetime] NOT NULL,
[DBName] [nvarchar](128) NULL
);
GO
CREATE TABLE #temp (
table_name sysname ,
row_count int,
reserved_size varchar(50),
data_size varchar(50),
index_size varchar(50),
unused_size varchar(50)
);
go
INSERT #temp
EXEC sp_msforeachtable 'sp_spaceused ''?'''
insert into dbo.BigTables
SELECT a.table_name,
a.row_count,
count(*) as col_count,
a.data_size,
getdate() as [Date],
'MY DB' as DBName
FROM #temp a
INNER JOIN information_schema.columns b
ON a.table_name collate database_default
= b.table_name collate database_default
GROUP BY a.table_name, a.row_count, a.data_size
ORDER BY CAST(Replace(a.data_size, ' KB', '') as integer) desc
DROP TABLE #temp;
Select * from dbo.BigTables;
이제 일주일 동안의 크기 변화를 확인하고 예약하는 논리 만 작성하면됩니다.