db/mssql

mssql 테이블 사용 용량 조회

strange-dev 2025. 4. 14. 19:43
반응형

mssql 테이블 사용 용량 조회

mssql 테이블 별 사용 용량 확인 쿼리

DECLARE @SchemaName SYSNAME = 'dbo';

DECLARE @TableName SYSNAME;
DECLARE TableCursor CURSOR FOR
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = @SchemaName;

OPEN TableCursor;

FETCH NEXT FROM TableCursor INTO @TableName;

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT '테이블: ' + @TableName;
    EXEC sp_spaceused @TableName;
    PRINT '----------------------';
    FETCH NEXT FROM TableCursor INTO @TableName;
END;

CLOSE TableCursor;
DEALLOCATE TableCursor;
쿼리 설명

 

1. dbo 스키마에 있는 모든 테이블 이름을 가져옵니다.
2. 각 테이블 이름을 하나씩 순회하면서 다음 작업을 반복합니다.

  • 테이블 이름을 출력합니다.
  • sp_spaceused 저장 프로시저를 실행하여 해당 테이블의 공간 사용 정보를 출력합니다.
  • 구분선을 출력합니다.
쿼리 상세 설명
  • DECLARE : 변수 선언
  • DECLARE TableCursor CURSOR FOR : 커서(Cursor)를 선언하는 부분이에요. 커서는 테이블의 행들을 하나씩 순회하면서 작업을 수행할 수 있게 해주는 데이터베이스 객체라고 생각하시면 됩니다. foreach 실행하기 위한 list라고 생각하시면 됩니다.
  • SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = @SchemaName; : dbo 스키마에 있는 모든 테이블 이름을 가져오는 쿼리
  • OPEN TableCursor; : 선언된 TableCursor를 실제로 사용하는 상태로 만드는 명령어예요. 커서를 열어야 데이터를 읽어올 수 있습니다.
  • FETCH NEXT FROM TableCursor : 커서에서 다음 행(여기서는 테이블 이름)을 가져오는 명령어.
  • INTO @TableName: 가져온 테이블 이름을 @TableName 변수에 저장하라는 의미입니다. 처음 실행될 때는 첫 번째 테이블 이름이 @TableName에 저장됩니다.
  • WHILE : 반복문입니다. 특정 조건이 참인 동안 BEGIN과 END 사이의 코드를 계속 실행합니다.
  • @@FETCH_STATUS: 가장 최근의 FETCH 문의 실행 결과를 나타내는 시스템 함수입니다.
  • 0 : FETCH가 성공적으로 행을 가져왔음을 의미합니다.
  • -1 : 가져올 행이 더 이상 없음을 의미합니다.
  • -2 : FETCH가 실패했거나 행이 없음을 의미합니다.
  • 따라서 WHILE @@FETCH_STATUS = 0은 "더 이상 가져올 테이블이 없을 때까지"라는 의미가 됩니다.
  • PRINT '테이블: ' + @TableName; : 아래 이미지

print 조회

  • EXEC sp_spaceused @TableName; : 아래 이미지

mssql 테이블 별 용량 조회 결과

  • 루프의 마지막 부분에서 다시 다음 테이블 이름을 커서에서 가져와 @TableName 변수에 저장합니다. WHILE 조건이 다시 평가되고, 아직 가져올 테이블이 있다면 반복 실행됩니다.
  • CLOSE TableCursor; : 더 이상 커서를 사용하지 않을 때 닫아주는 명령어예요. 시스템 리소스를 해제하는 역할을 합니다.
  • DEALLOCATE TableCursor; : 선언했던 커서 객체를 메모리에서 완전히 제거하는 명령어예요. CLOSE를 먼저 실행한 후에 DEALLOCATE를 실행해야 합니다.
 sp_spaceused 조회

2025.04.13 - [db/mssql] - mssql exec sp_spaceused table

 

mssql exec sp_spaceused table

mssql exec sp_spaceused table name exec sp_spaceused 테이블명현재 데이터베이스의 테이블, 인덱싱 된 뷰 또는 Service Broker 큐에서 사용하는 행 수, 예약된 디스크 공간 및 디스크 공간 전체 데

st-d.tistory.com

 

반응형