DBCC UPDATEUSAGE (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure 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 ] ]

Note

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 の実行の推奨が含まれます。

ベスト プラクティス

次をお勧めします。

  • ほとんどの状況では SQL Server によりメタデータが保持されるため、DBCC UPDATEUSAGE は定期的に実行しないでください。 DBCC UPDATEUSAGE は、たとえば sp_spaceused から正しくない値が返されていると思われる場合など、必要に応じて実行する必要があります。 大きなテーブルやデータベースでは、DBCC UPDATEUSAGE の実行に時間がかかることがあります。
  • データベースでデータ定義言語 (DDL) の変更 (CREATE、ALTER、DROP などのステートメント) が頻繁に実行されている場合に限り、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

関連項目