sp_spaceused(Transact-SQL)

행의 수, 예약된 디스크 공간 및 현재 데이터베이스의 테이블, 인덱싱된 뷰 또는 Service Broker에서 사용하는 디스크 공간을 표시하거나, 전체 데이터베이스가 예약하여 사용하는 디스크 공간을 표시합니다.

항목 링크 아이콘 Transact-SQL 구문 표기 규칙

구문

sp_spaceused [[ @objname = ] 'objname' ] 
[,[ @updateusage = ] 'updateusage' ]

인수

  • [ @objname=] 'objname'
    공간 사용 정보가 요청된 테이블, 인덱싱된 뷰 또는 큐의 정규화되거나 정규화되지 않은 이름입니다. 정규화된 개체 이름이 지정된 경우에만 따옴표가 필요합니다. 데이터베이스 이름을 포함하는 정규화된 개체 이름인 경우 데이터베이스 이름이 반드시 현재 데이터베이스의 이름이어야 합니다.

    objname을 지정하지 않으면 전체 데이터베이스에 대한 결과가 반환됩니다.

    objname은 nvarchar(776)이며 기본값은 NULL입니다.

  • [ @updateusage=] 'updateusage'
    공간 사용 정보를 업데이트하려면 DBCC UPDATEUSAGE를 실행해야 함을 나타냅니다. objname을 지정하지 않으면 문이 전체 데이터베이스에 대해 실행되고 지정하면 objname에 대해 실행됩니다. 값은 true 또는 false가 될 수 있습니다. updateusage는 varchar(5)이며 기본값은 false입니다.

반환 코드 값

0(성공) 또는 1(실패)

결과 집합

objname을 생략하면 현재 데이터베이스 크기 정보를 제공하는 다음 결과 집합이 반환됩니다.

열 이름

데이터 형식

설명

database_name

nvarchar(128)

현재 데이터베이스의 이름입니다.

database_size

varchar(18)

현재 데이터베이스의 크기(메가바이트)입니다. database_size에는 데이터 및 로그 파일이 모두 포함됩니다.

unallocated space

varchar(18)

데이터베이스 개체용으로 예약되지 않은 데이터베이스 공간입니다.

열 이름

데이터 형식

설명

reserved

varchar(18)

데이터베이스의 개체에 의해 할당된 총 공간입니다.

data

varchar(18)

데이터가 사용하는 총 공간입니다.

index_size

varchar(18)

인덱스가 사용하는 총 공간입니다.

unused

varchar(18)

데이터베이스의 개체에 예약되었지만 아직 사용되지 않은 총 공간입니다.

objname을 지정하면 지정된 개체에 대해 다음 결과 집합이 반환됩니다.

열 이름

데이터 형식

설명

name

nvarchar(128)

공간 사용 정보가 필요한 개체의 이름입니다.

개체의 스키마 이름은 반환되지 않습니다. 스키마 이름이 필요한 경우에는 sys.dm_db_partition_stats 또는 sys.dm_db_index_physical_stats 동적 관리 뷰를 사용하여 해당 크기 정보를 얻으십시오.

rows

char(11)

테이블에 있는 행 수입니다. 지정된 개체가 Service Broker 큐일 경우 이 열은 큐에 있는 메시지 수를 나타냅니다.

reserved

varchar(18)

objname에 대해 예약된 총 공간입니다.

data

varchar(18)

objname의 데이터에서 사용하는 총 공간입니다.

index_size

varchar(18)

objname의 인덱스에서 사용하는 총 공간입니다.

unused

varchar(18)

objname용으로 예약되었지만 아직 사용되지 않은 총 공간입니다.

주의

database_size는 로그 파일의 크기를 포함하기 때문에 reserved + unallocated space의 합계보다 항상 큽니다. reservedunallocated_space는 데이터 페이지만 고려하기 때문입니다.

XML 인덱스 및 전체 텍스트 인덱스에서 사용하는 페이지는 두 결과 집합 모두에 대해 index_size에 포함됩니다. objname이 지정된 경우 개체의 XML 인덱스 및 전체 텍스트 인덱스에서 사용하는 페이지도 전체 reservedindex_size 결과로 계산됩니다.

공간 인덱스가 있는 데이터베이스 또는 개체의 공간 사용량을 계산하는 경우 database_size, reservedindex_size와 같은 공간 크기 열에는 공간 인덱스의 크기도 포함됩니다.

updateusage가 지정된 경우 SQL Server 데이터베이스 엔진은 데이터베이스에서 데이터 페이지를 검색하고 sys.allocation_unitssys.partitions 카탈로그 뷰를 각 테이블에서 사용하는 저장 공간에 맞게 수정합니다. 인덱스가 삭제된 후처럼 테이블에 대한 공간 정보가 최신 상태가 아닌 경우도 있습니다. updateusage를 큰 테이블 또는 데이터베이스에 대해 실행하는 경우에는 시간이 걸릴 수 있습니다. 잘못된 값이 반환되었다고 생각되거나 이 프로세스가 데이터베이스의 다른 사용자 또는 프로세스에 역효과를 주지 않는 경우에만 updateusage를 사용하십시오. 원하는 경우에는 DBCC UPDATEUSAGE를 별도로 실행할 수 있습니다.

[!참고]

대형 인덱스를 삭제하거나 다시 작성할 때 또는 대형 테이블을 삭제하거나 자를 때 데이터베이스 엔진은 트랜잭션이 커밋될 때까지 실제 페이지 할당 취소 및 관련 잠금을 연기합니다. 삭제 작업이 지연되어도 할당된 공간이 즉시 해제되지는 않습니다. 따라서 큰 개체를 삭제하거나 자른 직후에 sp_spaceused에서 반환하는 값에는 사용 가능한 실제 디스크 공간이 반영되지 않을 수도 있습니다.

사용 권한

sp_spaceused를 실행할 수 있는 사용 권한은 public 역할에 부여됩니다. db_owner 고정 데이터베이스 역할의 멤버만 @updateusage 매개 변수를 지정할 수 있습니다.

1.테이블에 관한 디스크 공간 정보 표시

다음 예에서는 Vendor 테이블 및 해당 인덱스의 디스크 공간 정보를 알려 줍니다.

USE AdventureWorks2012;
GO
EXEC sp_spaceused N'Purchasing.Vendor';
GO

2.데이터베이스에 관한 업데이트된 공간 정보 표시

다음 예에서는 현재 데이터베이스에서 사용하는 공간을 요약하고 선택적 매개 변수 @updateusage를 사용하여 현재 값이 반환되도록 합니다.

USE AdventureWorks008R2;
GO
EXEC sp_spaceused @updateusage = N'TRUE';
GO

참고 항목

참조

CREATE INDEX(Transact-SQL)

CREATE TABLE(Transact-SQL)

DBCC UPDATEUSAGE(Transact-SQL)

sys.allocation_units(Transact-SQL)

sys.indexes(Transact-SQL)

sys.index_columns(Transact SQL)

sys.objects(Transact-SQL)

sys.partitions(Transact-SQL)

시스템 저장 프로시저(Transact-SQL)

개념

SQL Server Service Broker