sp_spaceused (Transact-SQL)

現在のデータベースのテーブル、インデックス付きビュー、または Service Broker キューで使用されている、行数、ディスクの予約領域、およびディスク使用領域を表示します。また、データベース全体で使用されているディスクの予約領域とディスク使用領域を表示します。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

sp_spaceused [[ @objname = ] 'objname' ] 
[,[ @updateusage = ] 'updateusage' ]

引数

  • [ @objname=] 'objname'
    領域の使用情報を要求するテーブル、インデックス付きビュー、またはキューの、修飾付きまたは修飾なしの名前を指定します。引用符は、オブジェクトの修飾名を指定する場合のみ必要です。データベース名も含めてオブジェクトの完全修飾名を指定した場合は、そのデータベース名は現在のデータベース名であることが必要です。

    objname を指定しない場合は、データベース全体に対する結果が返されます。

    objname のデータ型は nvarchar(776) で、既定値は NULL です。

  • [ @updateusage=] 'updateusage'
    領域の使用情報の更新に DBCC UPDATEUSAGE を使用するかどうかを示します。objname を指定しない場合、ステートメントはデータベース全体に対して実行されます。指定した場合、ステートメントは objname に対して実行されます。値には true または false を指定できます。updateusage のデータ型は varchar(5) で、既定値は false です。

リターン コード値

0 (成功) または 1 (失敗)

結果セット

objname を省略した場合は、現在のデータベース サイズの情報を示す次の結果セットが返されます。

列名

データ型

説明

database_name

nvarchar(128)

現在のデータベース名。

database_size

varchar(18)

現在のデータベースのサイズ (MB 単位)。database_size にはデータとログ ファイルの両方が含まれます。

unallocated space

varchar(18)

データベース オブジェクト用に予約されていないデータベースの領域。

列名

データ型

説明

reserved

varchar(18)

データベース内でオブジェクトによって割り当てられた領域の合計。

data

varchar(18)

データの使用領域の合計。

index_size

varchar(18)

インデックスの使用領域の合計。

unused

varchar(18)

データベース内でオブジェクト用に予約されており、使用されていない領域の合計。

objname を指定した場合は、指定したオブジェクトに対する次の結果セットが返されます。

列名

データ型

説明

name

nvarchar(128)

領域の使用情報を要求したオブジェクトの名前。

オブジェクトのスキーマ名は返されません。スキーマ名が必要な場合は、sys.dm_db_partition_stats または sys.dm_db_index_physical_stats 動的管理ビューを使用して、対応するサイズ情報を取得してください。

rows

char(11)

テーブルに含まれる行数。指定したオブジェクトが Service Broker キューの場合、この列にはキューのメッセージ数が表示されます。

reserved

varchar(18)

objname の予約領域の合計。

data

varchar(18)

objname のデータ使用領域の合計。

index_size

varchar(18)

objname のインデックス使用領域の合計。

unused

varchar(18)

objname 用に予約されており、使用されていない領域の合計。

説明

database_size は、ログ ファイルのサイズを含むため、常に reservedunallocated space の合計よりも大きくなります。ただし、reservedunallocated_space では、データ ページだけが考慮されます。

XML インデックスとフルテキスト インデックスで使用されるページは、両方の結果セットの index_size に含まれます。objname を指定した場合、オブジェクトの XML インデックスとフルテキスト インデックスのページは、reservedindex_size の結果の合計にも加えられます。

空間インデックスを持つデータベースまたはオブジェクトの領域使用状況を計算する場合、database_sizereservedindex_size などの領域サイズの列には、空間インデックスのサイズが含まれます。

updateusage を指定した場合、SQL Server データベース エンジンではデータベースのデータ ページがスキャンされ、sys.allocation_units および sys.partitions カタログ ビューで、各テーブルで使用されるストレージ領域に関して必要な修正が行われます。たとえば、インデックスを削除した後、テーブルの領域情報が最新ではない場合はその修正が行われます。大きなテーブルまたはデータベースで updateusage を実行すると時間がかかることがあります。updateusage は、返された値が正しくない可能性があり、データベースの他のユーザーまたはプロセスに影響しない場合にのみ使用してください。DBCC UPDATEUSAGE は、別に実行することもできます。

注意

大きなインデックスを削除または再構成した場合や、大きなテーブルを削除するか切り捨てた場合、データベース エンジンでは実際のページ割り当て解除とそれに関連するロックが、トランザクションがコミットされるまで延期されます。削除操作が延期された場合、割り当てられた領域は、すぐには解放されません。このため、ラージ オブジェクトを削除するか切り捨てた直後に sp_spaceused を実行して返された値は、実際に使用できるディスク領域を反映していないことがあります。遅延割り当ての詳細については、「ラージ オブジェクトの削除と再構築」を参照してください。

権限

sp_spaceused の実行権限は、public ロールに与えられています。@updateusage パラメーターを指定できるのは、db_owner 固定データベース ロールのメンバーだけです。

A. テーブルに関するディスク領域情報を表示する

次の例では、Vendor テーブルとインデックスのディスク領域情報をレポートします。

USE AdventureWorks2008R2;
GO
EXEC sp_spaceused N'Purchasing.Vendor';
GO

B. データベースに関する更新領域情報を表示する

次の例では、現在のデータベースで使用されている領域情報を要約し、省略可能なパラメーター @updateusage を使用して最新の値を取得します。

USE AdventureWorks2008R2;
GO
EXEC sp_spaceused @updateusage = N'TRUE';
GO