다음을 통해 공유


DBCC UPDATEUSAGE(Transact-SQL)

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance

카탈로그 뷰의 부정확한 페이지와 행 개수를 보고하고 수정합니다. 이러한 부정확성으로 인해 sp_spaceused 시스템 저장 프로시저에서 정확하지 않은 공간 사용 보고서를 반환할 수 있습니다.

Transact-SQL 구문 표기 규칙

구문

DBCC UPDATEUSAGE
(   { database_name | database_id | 0 }
    [ , { table_name | table_id | view_name | view_id }
    [ , { index_name | index_id } ] ]
) [ WITH [ NO_INFOMSGS ] [ , ] [ COUNT_ROWS ] ]

인수

database_name | database_id | 0

공간 사용량 통계를 보고하고 수정할 데이터베이스의 이름 또는 ID입니다. 0을 지정하면 현재 데이터베이스가 사용됩니다. 데이터베이스 이름은 식별자에 대한 규칙을 준수해야 합니다.

table_name | table_id | view_name | view_id

공간 사용 통계를 보고하고 수정할 테이블이나 인덱싱된 뷰의 이름 또는 ID입니다. 테이블 및 뷰 이름은 식별자 규칙을 따라야 합니다.

index_id | index_name

사용할 인덱스의 ID 또는 이름입니다. 이 인수를 지정하지 않으면 해당 문에서 지정한 테이블이나 뷰의 모든 인덱스를 처리합니다.

WITH

옵션을 지정할 수 있습니다.

NO_INFOMSGS

모든 정보 메시지를 표시하지 않습니다.

COUNT_ROWS

row count 열이 테이블이나 뷰에 있는 현재 행 개수로 업데이트되도록 지정합니다.

설명

DBCC UPDATEUSAGE는 테이블 또는 인덱스의 각 파티션에 대해 행, 사용된 페이지, 예약된 페이지, 리프 페이지 및 데이터 페이지의 개수를 수정합니다. 시스템 테이블에 부정확한 데이터가 없으면 DBCC UPDATEUSAGE는 데이터를 반환하지 않습니다. 부정확한 데이터를 검색 및 수정하고 WITH NO_INFOMSGS를 사용하지 않았으면 DBCC UPDATEUSAGE는 시스템 테이블에서 업데이트 중인 행과 열을 반환합니다.

페이지 또는 행 개수가 음수일 경우 이를 감지할 수 있도록 DBCC CHECKDB가 개선되었습니다. 감지가 되면 DBCC CHECKDB 출력에 경고와 함께 DBCC UPDATEUSAGE를 실행해 문제를 해결하라는 권장 메시지가 포함됩니다.

모범 사례

다음 방법을 사용하는 것이 좋습니다.

  • SQL Server는 대부분의 상황에서 메타데이터를 유지 관리하므로 DBCC UPDATEUSAGE를 정기적으로 실행하지 마세요. 예를 들어 sp_spaceused에 의해 잘못된 값이 반환되는 것으로 의심되는 경우 DBCC UPDATEUSAGE를 필요에 따라 실행해야 합니다. DBCC UPDATEUSAGE를 큰 테이블 또는 데이터베이스에 대해 실행하는 경우에는 시간이 걸릴 수 있습니다.
  • 데이터베이스에서 CREATE, ALTER 또는 DROP 문과 같은 DDL(데이터 정의 언어) 수정이 자주 발생하는 경우에만 DBCC UPDATEUSAGE를 정기적으로(예: 매주) 실행하세요.

결과 집합

DBCC UPDATEUSAGE는 다음을 반환합니다(값은 상황에 따라 다름).

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

사용 권한

sysadmin 고정 서버 역할의 멤버 또는 db_owner 고정 데이터베이스 역할의 멤버여야 합니다.

예제

A. 현재 데이터베이스의 모든 개체에 대한 페이지나 행 개수 또는 두 가지 모두 업데이트

다음 예에서는 데이터베이스 이름에 0을 지정하고 DBCC UPDATEUSAGE는 현재 데이터베이스에 대해 업데이트된 페이지 및 행 수 정보를 보고합니다.

DBCC UPDATEUSAGE (0);
GO

B. AdventureWorks에 대한 페이지나 행 개수 또는 두 가지를 모두 업데이트하고 정보 메시지를 표시 안 함

다음 예에서는 데이터베이스 이름으로 AdventureWorks2022를 지정하고 모든 정보 메시지를 표시하지 않습니다.

DBCC UPDATEUSAGE (AdventureWorks2022) WITH NO_INFOMSGS;
GO

C. Employee 테이블의 페이지나 행 개수 또는 두 가지를 모두 업데이트

다음 예제에서는 Employee 데이터베이스의 AdventureWorks2022 테이블에 대해 업데이트된 페이지 또는 행 수 정보를 보고합니다.

DBCC UPDATEUSAGE (AdventureWorks2022, 'HumanResources.Employee');
GO

D. 테이블에 있는 특정 인덱스에 대한 페이지나 행 개수 또는 두 가지를 모두 업데이트

다음 예에서는 인덱스 이름으로 IX_Employee_ManagerID를 지정합니다.

DBCC UPDATEUSAGE (AdventureWorks2022, 'HumanResources.Employee', IX_Employee_OrganizationLevel_OrganizationNode);
GO

추가 정보