DBCC UPDATEUSAGE (Transact-SQL)
适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例
报告目录视图中的页数和行数错误并进行更正。 这些错误可能导致 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 ] ]
注意
若要查看 SQL Server 2014 及更早版本的 Transact-SQL 语法,请参阅早期版本文档。
参数
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
解决该问题。
最佳实践
建议如下:
- 请不要定期运行
DBCC UPDATEUSAGE
,因为 SQL Server 在大多数情况下都会维护元数据。DBCC UPDATEUSAGE
应该根据需要运行,例如怀疑sp_spaceused
返回的值不正确时。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