DBCC UPDATEUSAGE (Transact-SQL)
適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體
報告和更正目錄檢視中不準確的頁面和資料列計數。 這些不準確的內容可能會使 sp_spaceused
系統預存程序傳回不正確的空間使用方式報表。
Syntax
DBCC UPDATEUSAGE
( { database_name | database_id | 0 }
[ , { table_name | table_id | view_name | view_id }
[ , { index_name | index_id } ] ]
) [ WITH [ NO_INFOMSGS ] [ , ] [ COUNT_ROWS ] ]
注意
若要檢視 SQL Server 2014 與更早版本的 Transact-SQL 語法,請參閱舊版文件。
引數
database_name | database_id | 0
要報告與更正空間使用方式統計資料之資料庫的名稱或識別碼。 如果指定 0,就會使用目前的資料庫。 資料庫名稱必須符合識別碼的規則。
table_name | table_id | view_name | view_id
要報告與更正空間使用方式統計資料之資料表或索引檢視的名稱或識別碼。 資料表和檢視表名稱必須符合識別碼的規則。
index_id | index_name
要使用之索引的識別碼或名稱。 若未指定,陳述式會處理指定資料表或檢視表的所有索引。
WITH
接受即將指定的選項。
NO_INFOMSGS
隱藏所有參考訊息。
COUNT_ROWS
指定利用資料表或檢視表中目前的資料列計數來更新 row count 資料行。
備註
DBCC UPDATEUSAGE
會更正資料表或索引中每個資料分割的資料列、使用頁面、保留頁面、分葉頁和資料頁的計數。 如果系統資料表中沒有不準確的內容,DBCC UPDATEUSAGE
不會傳回任何資料。 如果找到且更正了不準確的內容,就不會使用 WITH NO_INFOMSGS,DBCC UPDATEUSAGE
會傳回系統資料表要更新的資料列和資料行。
DBCC CHECKDB
已經增強,可偵測到頁面或資料列計數變成負數。 偵測到此狀況時,DBCC CHECKDB
輸出會包含警告及執行 DBCC UPDATEUSAGE
以處理此問題的建議。
最佳做法
我們的建議如下:
- 請勿定期執行
DBCC UPDATEUSAGE
,因為 SQL Server 在大部分情況下會維護中繼資料。DBCC UPDATEUSAGE
應該視需要執行,例如,當您懷疑sp_spaceused
傳回不正確的值時。DBCC UPDATEUSAGE
可能需要一些時間才能在大型資料表或資料庫上執行。 - 只有當資料庫頻繁執行資料定義語言 (Data Definition Language,DDL) 修改,例如 CREATE、ALTER 或 DROP 陳述式時,才考慮定期執行
DBCC UPDATEUSAGE
(例如每週)。
結果集
DBCC UPDATEUSAGE
會傳回 (值可能不同):
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
權限
需要 系統管理員 固定伺服器角色或 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