본문 바로가기

Server Story..../Windows Server

MSsql DB 테이블별 크기 조회 쿼리


SET NOCOUNT ON
--정보를 저장할 임시 테이블을 만든다. 
CREATE TABLE #TBLSize   
(Tblname varchar(80), 
TblRows int, 
TblReserved varchar(80), 
TblData varchar(80), 
TblIndex_Size varchar(80), 
TblUnused varchar(80)) ;
DECLARE @DBname varchar(80) 
DECLARE @tablename varchar(80)
SELECT @DBname = DB_NAME(DB_ID()) 
PRINT 'User Table size Report for (Server / Database):   ' + @@ServerName + ' / ' + @DBName 
PRINT ''
 
-------커서를 할당하고 오픈후 작업을 시작한다.------- 
DECLARE TblName_cursor CURSOR FOR 
SELECT NAME 
FROM sysobjects 
WHERE xType = 'U'

OPEN TblName_cursor
FETCH NEXT FROM TblName_cursor 
INTO @tablename
WHILE @@FETCH_STATUS = 0 
BEGIN 
   INSERT INTO #tblSize(Tblname, TblRows, TblReserved, TblData, TblIndex_Size, TblUnused) 
   EXEC Sp_SpaceUsed @tablename 
       
-- 다음 항목의 테이블정보를 가져와서 인서트한다. 
   FETCH NEXT FROM TblName_cursor 
   INTO @tablename 
END

CLOSE TblName_cursor 
DEALLOCATE TblName_cursor 
-------커서작업을 마치고 닫는다.-------

PRINT 'By Size Descending'
-- 1.테이블이 차지하는 용량순으로 출력 
SELECT  CAST(Tblname as Varchar(30)) 'Table', 
              CAST(TblRows as Varchar(14)) 'Row Count', 
              CAST(LEFT(TblReserved, CHARINDEX(' KB', TblReserved)) as int) 'Total Space (KB)', 
              CAST(TblData as Varchar(14)) 'Data Space', 
              CAST(TblIndex_Size  as Varchar(14)) 'Index Space', 
              CAST(TblUnused as Varchar(14)) 'Unused Space' 
FROM #tblSize 
Order by 'Total Space (KB)' Desc  
 
 

PRINT '' 
PRINT 'By Table Name Alphabetical'
-- 2.테이블 이름순으로 출력 
SELECT  CAST(Tblname as Varchar(30)) 'Table', 
              CAST(TblRows as Varchar(14)) 'Row Count', 
              CAST(LEFT(TblReserved, CHARINDEX(' KB', TblReserved)) as int) 'Total Space (KB)', 
              CAST(TblData as Varchar(14)) 'Data Space', 
              CAST(TblIndex_Size  as Varchar(14)) 'Index Space', 
              CAST(TblUnused as Varchar(14)) 'Unused Space' 
FROM #tblSize 
Order by 'Table'

--DROP TABLE #TblSize