DBMS/MSSQL

[MSSQL] 테이블(Table) 용량 확인 쿼리

개발하는 월퐁잉 2022. 9. 7. 09:41
728x90

 

운영 하는 사이트가 활성화 됨에 따라

Data 양이 증가 되고 Table 을 주기적으로 관리를 하지 않으면 속도지연의 이슈로 발생이 될 수 있다.

 

나의 경우 Log, History 등 과 같은 추적목적인 경우 최소 6개월 의 Data 만 보관 할 수 있도록 하고 있다.

 

간혹 Table 관리가 되지 않아 Query를 통해 용량 확인 해야 하는 경우가 있어 정리 해 볼까 한다.


-- [1] 디비정보 확인
EXEC SP_HELPDB 조회하고자하는 DB명

DB 정보 확인 결과

 

-- [1] 테이블 크기
 exec sp_spaceused 테이블명;

대상 테이블 크기 확인 결과


 

전체 테이블의 용량을 확인 하고자 할때 아래 Query로 활용 하면 유용하다

 

-- 테이블 용량 조회
DECLARE	@SIZE INT	-- 관리대상 테이블 크기(KB)
DECLARE @LOW BIGINT

SELECT @LOW = LOW FROM MASTER.DBO.SPT_VALUES 
WHERE NUMBER = 1 AND TYPE = 'E'

SELECT TMP.CRDATE AS DATES
,OBJECT_NAME(TMP.ID) AS NAME
,CONVERT(CHAR(11),SUM(ROWS)) AS ROWS
,LTRIM(STR(SUM(TMP.RESERVED) * @LOW / 1024.,15,0) + ' ' + 'KB') AS RESERVED
,LTRIM(STR(SUM(TMP.DATA) * @LOW / 1024.,15,0) + ' ' + 'KB') AS DATA
,LTRIM(STR((SUM(TMP.USED) - SUM(TMP.DATA)) * @LOW / 1024.,15,0) + ' ' + 'KB') AS INDEX_SIZE
,LTRIM(STR((SUM(TMP.RESERVED) - SUM(TMP.USED)) * @LOW / 1024.,15,0) + ' ' + 'KB') AS UNUSED
FROM (
SELECT OBJ.ID AS ID, SUM(IND.ROWS) AS ROWS, SUM(IND.RESERVED) AS RESERVED, SUM(DPAGES) AS DATA, 
ISNULL(SUM(USED), 0) AS USED, MAX(OBJ.CRDATE) AS CRDATE
FROM SYSINDEXES IND JOIN SYSOBJECTS OBJ ON IND.ID = OBJ.ID 
WHERE OBJ.XTYPE='U' AND IND.INDID < 2
GROUP BY OBJ.ID 
UNION
SELECT OBJ.ID AS ID, 0 AS ROWS, SUM(IND.RESERVED) AS RESERVED, ISNULL(SUM(USED), 0) AS DATA, 
ISNULL(SUM(USED), 0) AS USED, MAX(OBJ.CRDATE) AS CRDATE
FROM SYSINDEXES IND JOIN SYSOBJECTS OBJ ON IND.ID = OBJ.ID 
WHERE OBJ.XTYPE='U' AND IND.INDID = 255
GROUP BY OBJ.ID ) TMP
GROUP BY TMP.ID, TMP.CRDATE 
-- 조건추가
--HAVING SUM(TMP.DATA) * @LOW / 1024. >  200 * 1024 
ORDER BY SUM(TMP.DATA) DESC, SUM(TMP.USED) DESC

각 테이블의 용량 확인


 

728x90
반응형