DBCC UPDATEUSAGE (Transact-SQL)

カタログ ビューのページと行数の情報に不一致がある場合、それらをレポートおよび修正します。情報に不一致があると、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 2000 からデータベースをアップグレードした後は、必ず DBCC UPDATEUSAGE を実行します。ページと行のカウントが修正されて、適切に管理されるようになります。

  • SQL Server 2005 以降で作成されたデータベースでは、DBCC UPDATEUSAGE を定期的に実行しません。データベースを以前のバージョンからアップグレードして、DBCC UPDATEUSAGE で修正したことがある場合も同様です。DBCC UPDATEUSAGE は、大規模なテーブルやデータベースで実行すると時間がかかるため、sp_spaceused で返される値が正しくないと思われる場合以外は使用しないようにします。

  • データベースでデータ定義言語 (DDL) の変更 (CREATE、ALTER、DROP などのステートメント) が頻繁に実行されている場合に限り、DBCC UPDATEUSAGE を定期的 (毎週など) に実行することを検討します。

結果セット

DBCC UPDATEUSAGE では次の情報が返されます (値は変わることがあります)。

DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。

権限

sysadmin 固定サーバー ロールまたは db_owner 固定データベース ロールのメンバシップが必要です。

A. 現在のデータベースのすべてのオブジェクトに対し、ページ数または行数、あるいはその両方を更新する

次の例では、データベース名に 0 を指定し、DBCC UPDATEUSAGE で現在のデータベースに対する更新されたページ数または行数をレポートします。

DBCC UPDATEUSAGE (0);
GO

B. AdventureWorks に対してページ数または行数、あるいはその両方を更新し、情報メッセージを表示しない

次の例では、データベース名に AdventureWorks を指定し、すべての情報メッセージを表示しないよう指定します。

USE AdventureWorks;
GO
DBCC UPDATEUSAGE (AdventureWorks) WITH NO_INFOMSGS; 
GO

C. Employee テーブルに対してページ数または行数、あるいはその両方を更新する

次の例では、AdventureWorks データベースの Employee テーブルに関して、更新されたページ数または行数をレポートします。

USE AdventureWorks;
GO
DBCC UPDATEUSAGE (AdventureWorks,"HumanResources.Employee");
GO

D. テーブル内の特定のインデックスに対してページ数または行数、あるいはその両方を更新する

次の例では、インデックス名に IX_Employee_ManagerID を指定します。

USE AdventureWorks;
GO
DBCC UPDATEUSAGE (AdventureWorks, "HumanResources.Employee", IX_Employee_ManagerID);
GO

変更履歴

変更内容

「解説」に「ベスト プラクティス」を追加しました。