sp_spaceused (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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

Transact-SQL 構文表記規則

構文

sp_spaceused [[ @objname = ] 'objname' ]   
[, [ @updateusage = ] 'updateusage' ]  
[, [ @mode = ] 'mode' ]  
[, [ @oneresultset = ] oneresultset ]  
[, [ @include_total_xtp_storage = ] include_total_xtp_storage ]

Note

この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。

引数

Azure Synapse Analytics and Analytics Platform System (PDW) の場合は、 sp_spaceused パラメーターの序数位置に依存するのではなく、名前付きパラメーター sp_spaceused (@objname= N'Table1'); を指定する必要があります。

[ @objname = ] 'objname'

領域の使用情報を要求するテーブル、インデックス付きビュー、またはキューの、修飾付きまたは修飾なしの名前を指定します。 引用符は、修飾オブジェクト名が指定されている場合にのみ必要です。 完全修飾オブジェクト名 (データベース名を含む) を指定する場合、データベース名は現在のデータベースの名前である必要があります。
objname が指定されていない場合は、データベース全体の結果が返されます。
objnamenvarchar(776)で、既定値は NULL です。

Note

Azure Synapse Analytics and Analytics Platform System (PDW) では、データベース オブジェクトとテーブル オブジェクトのみがサポートされます。

[ @updateusage = ] 'updateusage' 領域の使用状況情報を更新するために DBCC UPDATEUSAGE を実行する必要があることを示します。 objname が指定されていない場合、ステートメントはデータベース全体で実行されます。それ以外の場合は、objnameステートメントが実行されます。 値には true または false を指定できます。 updateusagevarchar(5) で、既定値は false です

[ @mode = ] 'mode' 結果のスコープを示します。 ストレッチ テーブルまたはデータベースの場合、mode パラメーターを使用すると、オブジェクトのリモート部分を含めたり除外したりできます。 詳細については、「 Stretch Database」を参照してください。

重要

拡張データベースは、SQL Server 2022 (16.x) および Azure SQL Database では非推奨になります。 この機能は、データベース エンジンの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。

mode 引数には、次の値を指定できます。

Value 説明
ALL ローカル部分とリモート部分の両方を含む、オブジェクトまたはデータベースのストレージ統計を返します。
LOCAL_ONLY オブジェクトまたはデータベースのローカル部分のみのストレージ統計を返します。 オブジェクトまたはデータベースが Stretch 対応でない場合は、when = ALL と同じ統計情報を @mode 返します。
REMOTE_ONLY オブジェクトまたはデータベースのリモート部分のみのストレージ統計を返します。 このオプションは、次のいずれかの条件に該当する場合にエラーを発生させます。

テーブルが Stretch に対して有効になっていません。

テーブルは Stretch に対して有効になっていますが、データ移行を有効にしたことがない。 この場合、リモート テーブルにはスキーマがまだありません。

ユーザーはリモート テーブルを手動で削除しました。

リモート データ アーカイブのプロビジョニングは成功の状態を返しましたが、実際には失敗しました。

modevarchar(11) で、既定値は N'ALL' です

[ @oneresultset = ] oneresultset 1 つの結果セットを返すかどうかを示します。 oneresultset 引数には、次の値を指定できます。

Value 内容
0 @objnameが null または指定されていない場合は、2 つの結果セットが返されます。 既定の動作は、2 つの結果セットです。
1 @objname = null または指定されていない場合は、1 つの結果セットが返されます。

oneresultsetビットで、既定値は 0 です

[ @include_total_xtp_storage] 'include_total_xtp_storage'適用対象: SQL Server 2017 (14.x)、SQL Database。

このパラメーター@include_total_xtp_storageは@oneresultset=1、単一の結果セットにストレージの列MEMORY_OPTIMIZED_DATA含めるかどうかを決定します。 既定値は 0 です。つまり、既定では (パラメーターを省略した場合)、XTP 列は結果セットに含まれません。

リターン コードの値

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

結果セット

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

列名 データ型 説明
database_name nvarchar(128) 現在のデータベースの名前。
database_size varchar(18) 現在のデータベースのサイズ (MB 単位)。 database_sizeには、データ ファイルとログ ファイルの両方が含まれます。
未割り当て領域 varchar(18) データベース オブジェクト用に予約されていないデータベース内の領域。
列名 データ型 説明
reserved varchar(18) データベース内でオブジェクトによって割り当てられた領域の合計。
data varchar(18) データの使用領域の合計。
index_size varchar(18) インデックスによって使用される領域の合計量。
未使用 varchar(18) データベース内のオブジェクト用に予約されているが、まだ使用されていない領域の合計量。

objname を省略し、oneresultset の値が 1 の場合は、次の単一の結果セットが返され、現在のデータベース サイズ情報が提供されます。

列名 データ型 説明
database_name nvarchar(128) 現在のデータベースの名前。
database_size varchar(18) 現在のデータベースのサイズ (MB 単位)。 database_sizeには、データ ファイルとログ ファイルの両方が含まれます。
未割り当て領域 varchar(18) データベース オブジェクト用に予約されていないデータベース内の領域。
reserved varchar(18) データベース内でオブジェクトによって割り当てられた領域の合計。
data varchar(18) データの使用領域の合計。
index_size varchar(18) インデックスによって使用される領域の合計量。
未使用 varchar(18) データベース内のオブジェクト用に予約されているが、まだ使用されていない領域の合計量。

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

列名 データ型 説明
name nvarchar(128) 領域の使用情報を要求したオブジェクトの名前。

オブジェクトのスキーマ名は返されません。 スキーマ名が必要な場合は、sys.dm_db_partition_statsまたは動的管理ビュー sys.dm_db_index_physical_stats使用して、同等のサイズ情報を取得します。
rows char(20) テーブルに含まれる行数。 指定されたオブジェクトが Service Broker キューの場合、この列はキュー内のメッセージの数を示します。
reserved varchar(18) objname の予約領域の合計量。
data varchar(18) objname 内のデータによって使用される領域の合計量。
index_size varchar(18) objname 内のインデックスによって使用される領域の合計量。
未使用 varchar(18) objname 用に予約されているが、まだ使用されていない領域の合計量。

これは、パラメーターが指定されていない場合の既定のモードです。 次の結果セットは、ディスク上のデータベース サイズ情報の詳細を返します。

列名 データ型 説明
database_name nvarchar(128) 現在のデータベースの名前。
database_size varchar(18) 現在のデータベースのサイズ (MB 単位)。 database_sizeには、データ ファイルとログ ファイルの両方が含まれます。 データベースにMEMORY_OPTIMIZED_DATAファイル グループがある場合、これには、ファイル グループ内のすべてのチェックポイント ファイルのディスク上の合計サイズが含まれます。
未割り当て領域 varchar(18) データベース オブジェクト用に予約されていないデータベース内の領域。 データベースに MEMORY_OPTIMIZED_DATA ファイル グループがある場合、これには、ファイル グループの状態が PRECREATED のチェックポイント ファイルのディスク上の合計サイズが含まれます。

データベース内のテーブルによって使用される領域: (この結果セットには、ディスク使用量のテーブルごとのアカウンティングがないため、メモリ最適化テーブルは反映されません)

列名 データ型 説明
reserved varchar(18) データベース内でオブジェクトによって割り当てられた領域の合計。
data varchar(18) データの使用領域の合計。
index_size varchar(18) インデックスによって使用される領域の合計量。
未使用 varchar(18) データベース内のオブジェクト用に予約されているが、まだ使用されていない領域の合計量。

次の結果セットは、データベースに少なくとも 1 つのコンテナーを含むMEMORY_OPTIMIZED_DATAファイル グループがある場合にのみ返されます。

列名 データ型 説明
xtp_precreated varchar(18) 状態が PRECREATED のチェックポイント ファイルの合計サイズ (KB (キロバイト))。 データベース全体の未割り当て領域にカウントされます。 [たとえば、事前に作成された チェックpoint ファイルのKB (キロバイト)が 600,000 個ある場合、この列には "600000 KB (キロバイト)" が含まれます]
xtp_used varchar(18) チェック構築中、アクティブ、マージ ターゲットの状態を持つKB (キロバイト)のポイント ファイルの合計サイズ。 これは、メモリ最適化テーブルのデータに対してアクティブに使用されるディスク領域です。
xtp_pending_truncation varchar(18) 状態WAITING_FOR_LOG_TRUNCATIONを持つチェックポイント ファイルの合計サイズ (KB (キロバイト))。 これは、ログの切り捨てが行われると、クリーンアップを待機しているチェックポイント ファイルに使用されるディスク領域です。

objname が省略され、oneresultset の値が 1、include_total_xtp_storageが 1 の場合、現在のデータベース サイズ情報を提供するために、次の単一の結果セットが返されます。 0 (既定値) の場合 include_total_xtp_storage 、最後の 3 つの列は省略されます。

列名 データ型 説明
database_name nvarchar(128) 現在のデータベースの名前。
database_size varchar(18) 現在のデータベースのサイズ (MB 単位)。 database_sizeには、データ ファイルとログ ファイルの両方が含まれます。 データベースにMEMORY_OPTIMIZED_DATAファイル グループがある場合、これには、ファイル グループ内のすべてのチェックポイント ファイルのディスク上の合計サイズが含まれます。
未割り当て領域 varchar(18) データベース オブジェクト用に予約されていないデータベース内の領域。 データベースに MEMORY_OPTIMIZED_DATA ファイル グループがある場合、これには、ファイル グループの状態が PRECREATED のチェックポイント ファイルのディスク上の合計サイズが含まれます。
reserved varchar(18) データベース内でオブジェクトによって割り当てられた領域の合計。
data varchar(18) データの使用領域の合計。
index_size varchar(18) インデックスによって使用される領域の合計量。
未使用 varchar(18) データベース内のオブジェクト用に予約されているが、まだ使用されていない領域の合計量。
xtp_precreated varchar(18) 状態が PRECREATED のチェックポイント ファイルの合計サイズ (KB (キロバイト))。 これは、データベース全体の未割り当て領域にカウントされます。 データベースに少なくとも 1 つのコンテナーを含むmemory_optimized_dataファイル グループがない場合は NULL を返します。 *この列は、次の場合 @include_total_xtp_storage=1*にのみ含まれます。
xtp_used varchar(18) チェック構築中、アクティブ、マージ ターゲットの状態を持つKB (キロバイト)のポイント ファイルの合計サイズ。 これは、メモリ最適化テーブルのデータに対してアクティブに使用されるディスク領域です。 データベースに少なくとも 1 つのコンテナーを含むmemory_optimized_dataファイル グループがない場合は NULL を返します。 *この列は、次の場合 @include_total_xtp_storage=1*にのみ含まれます。
xtp_pending_truncation varchar(18) 状態WAITING_FOR_LOG_TRUNCATIONを持つチェックポイント ファイルの合計サイズ (KB (キロバイト))。 これは、ログの切り捨てが行われると、クリーンアップを待機しているチェックポイント ファイルに使用されるディスク領域です。 データベースに少なくとも 1 つのコンテナーを含むmemory_optimized_dataファイル グループがない場合は NULL を返します。 この列は、次の場合 @include_total_xtp_storage=1にのみ含まれます。

解説

database_sizeは、一般に、ログ ファイルのサイズが含まれているため、予約 + 済みの未割り当て領域の合計よりも大きくなりますが、予約済みおよびunallocated_spaceではデータ ページのみが考慮されます。 Azure Synapse Analytics では、このステートメントが正しくない場合があります。

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

空間インデックスを持つデータベースまたはオブジェクトの領域使用量が計算される場合、空間サイズの列 (database_size、予約済み、index_sizeなど) には空間インデックスのサイズが含まれます。

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

Note

大きなインデックスを削除または再構築したり、大きなテーブルに対する削除や切り詰めを行うと、トランザクションがコミットされるまで、データベース エンジンにより、実際のページの割り当て解除と、それらに関連付けられたロックが遅延されます。 遅延された削除操作では、割り当てられた領域は直ちに解放されません。 そのため、大きなオブジェクトを削除または切り捨てた直後にsp_spaceusedによって返される値は、使用可能な実際のディスク領域を反映していない可能性があります。

アクセス許可

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

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

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

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

B. データベースに関する更新された領域情報の表示

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

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

C: Stretch 対応テーブルに関連付けられているリモート テーブルに関する領域使用状況情報の表示

次の例では、@mode引数を使用してリモート ターゲットを指定することで、Stretch 対応テーブルに関連付けられているリモート テーブルで使用される領域を要約します。 詳細については、「 Stretch Database」を参照してください。

USE StretchedAdventureWorks2022  
GO  
EXEC sp_spaceused N'Purchasing.Vendor', @mode = 'REMOTE_ONLY'  

D. 単一の結果セット内のデータベースのスペース使用量情報の表示

次の例は、1 つの結果セット内の現在のデータベースの領域使用量をまとめたものです。

USE AdventureWorks2022  
GO  
EXEC sp_spaceused @oneresultset = 1  

E. 1 つの結果セットに少なくとも 1 つのMEMORY_OPTIMIZED ファイル グループがあるデータベースの領域使用量情報を表示する

次の例では、1 つの結果セットに少なくとも 1 つのMEMORY_OPTIMIZED ファイル グループがある現在のデータベースの領域使用量を要約します。

USE WideWorldImporters
GO
EXEC sp_spaceused @updateusage = 'FALSE', @mode = 'ALL', @oneresultset = '1', @include_total_xtp_storage = '1';
GO

F. データベース内のMEMORY_OPTIMIZEDテーブル オブジェクトの領域使用状況情報を表示する。

次の例では、現在のデータベース内のMEMORY_OPTIMIZED テーブル オブジェクトの領域使用量と、少なくとも 1 つのMEMORY_OPTIMIZEDファイル グループを要約します。

USE WideWorldImporters
GO
EXEC sp_spaceused
@objname = N'VehicleTemparatures',
@updateusage = 'FALSE',
@mode = 'ALL',
@oneresultset = '0',
@include_total_xtp_storage = '1';
GO

参照

CREATE INDEX (Transact-SQL)
CREATE TABLE (Transact-SQL)
DBCC UPDATEUSAGE (Transact-SQL)
SQL Server Service Broker (SQL Server Service Broker)
sys.allocation_units (Transact-SQL)
sys.indexes (Transact-SQL)
sys.index_columns (Transact-SQL)
sys.objects (Transact-SQL)
sys.partitions (Transact-SQL)
システム ストアド プロシージャ (Transact-SQL)