DBCC UPDATEUSAGE(Transact-SQL)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance
카탈로그 뷰의 부정확한 페이지와 행 개수를 보고하고 수정합니다. 이러한 부정확성으로 인해 sp_spaceused
시스템 저장 프로시저에서 정확하지 않은 공간 사용 보고서를 반환할 수 있습니다.
구문
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