sp_spaceused (Transact-SQL)

適用対象: SQL Server Azure 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 です。

注意

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

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

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

重要

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

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

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

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

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

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

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

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

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

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

oneresultsetbit で、既定値は 0 です

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

の場合 @oneresultset=1、パラメーター @include_total_xtp_storage は、単一の結果セットにストレージの列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 単位)。 データベース全体の未割り当て領域にカウントされます。 [たとえば、事前に作成されたチェックポイント ファイルが 600,000 KB ある場合、この列には '600000 KB' が含まれます]
xtp_used varchar(18) [CONSTRUCTION]、[ACTIVE]、[MERGE TARGET] の状態を持つチェックポイント ファイルの合計サイズ (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) [CONSTRUCTION]、[ACTIVE]、[MERGE TARGET] の状態を持つチェックポイント ファイルの合計サイズ (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 は、別に実行することもできます。

注意

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

アクセス許可

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

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

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

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

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

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

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

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

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

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

D. データベースのスペース使用量情報を 1 つの結果セットに表示する

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

USE AdventureWorks2016  
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)